Oracle全文索引及定时任务(总结)

全文索引

Oracle的全文检索实现逻辑,通过lexer词法分析器,把值的term找出来。相对于使用like,或者instr函数,速度有着明显的优势。但是因为分词,所以会占用的一定的空间。如果空间足够以及对速度有一样的需求,可以考虑全文检索。

一.建立索引前提

  1. 检查和设置数据库角色首先检查数据库中是否有CTXSYS用户CTXAPP角色。oracle11g 默认安装的都有,如果没有这个用户和角色,意味着你的数据库创建时未安装intermedia功能,需要修改数据库安装这项功能。
  2. 默认安装情况下,ctxsys用户是被锁定的,因此要先启用ctxsys的用户;并且要在用户下把ctx_ddl的执行权限赋于要使用全文索引的用户。
    解锁:ALTER ${用户} CTXSYS ACCOUNT UNLOCK;
    赋权:grant execute on ctx_ddl to ${用户}

二.设置分析器

oracle text中的分析器有3种:

1. basic_lexer:
针对英文,只能根据空格和标点来进行拆分。比如“中国深圳”,只能拆分为“中国深圳”一个词,根据“中国”或者“深圳”就搜索不到。
2. chinese_vgram_lexer:
专门的汉语分析器,按字单元进行拆分,比如“中国深圳”,可以拆分为“中”、“中国“、”国深”、“深圳”、“圳”五个词组。这种方式的好处是能够将所有有可能的词组全部保存进索引表,使得数据不会遗漏,但是效率上来说就差强人意了。
3. chinese_lexer:
一种新的汉语分析器,能够认识大部分常用的汉语词汇,较与chinese_vgram_lexer机械式的拆分,能够按常用词汇进行拆分存储。比如“中国深圳”,只会被拆分为“中国”、“深圳”两个词组,但是精确度没有上一个分析器高。
指定分析器代码如下:其中my_lexer是自定义的分析器名

BEGIN
  ctx_ddl.create_preference ('my_lexer', 'chinese_lexer');
END;

三.创建过滤词组

在我们建索引的时候,通常需要对一些常用的词组进行过滤,比如对公司名称进行检索时,肯定不希望输入“有限公司”、“公司”等关键词时,也会有搜索结果。
创建过滤词组:

exec ctx_ddl.create_stoplist('my_stoplist');  

自定义需要过滤的词组内容:

ctx_ddl.add_stopword('my_stoplist','有限公司');  
ctx_ddl.add_stopword('my_stoplist','股份有限公司'); 

意思就是,创建了一个名为“my_stoplist”的过滤词组,“有限公司”、“股份有限公司”这两个词组不会被创建为索引。

四.创建全文索引

对指定列建立全文索引:

create index INX_ATTRIBUTION  on gsmdata(ATTRIBUTION) indextype is 
CTXSYS.CONTEXT parameters('lexer my_lexer stoplist my_stoplist');

注释版:

CREATE INDEX  ${
   INDEX_NAME} ON ${
   TABLE_NAME}(${
   CLOUM_NAME}) indextype
 is ctxsys.context  parameters('lexer ${分析器} stoplist ${过滤词组}');

总结:在gsmdata表中的ATTRIBUTION字段上创建索引,索引类系那个为context类

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值