快速使用oracle的全文检索

1.给你的数据库用户赋权
SQL> grant ctxapp to <用户>;
SQL> grant execute on ctxsys.ctx_ddl to <用户>;
2.建索引
注意:把 <aaa> 换成表空间的名字。最好新建一个,这是用来存放text index (全文检索索引)的
begin
ctx_ddl.create_preference('自定义_lexer','CHINESE_VGRAM_LEXER');
ctx_ddl.create_preference('自定义_store','BASIC_STORAGE');
ctx_ddl.set_attribute('自定义_store', 'I_TABLE_CLAUSE',
       'tablespace 表空间名称');
ctx_ddl.set_attribute('自定义_store', 'K_TABLE_CLAUSE',
       'tablespace 表空间名称');
ctx_ddl.set_attribute('自定义_store', 'R_TABLE_CLAUSE',
       'tablespace 表空间名称');
ctx_ddl.set_attribute('自定义_store', 'N_TABLE_CLAUSE',
       'tablespace 表空间名称');
ctx_ddl.set_attribute('自定义_store', 'I_INDEX_CLAUSE',
       'tablespace 表空间名称');
ctx_ddl.set_attribute('自定义_store', 'P_TABLE_CLAUSE',
       'tablespace 表空间名称');
end;
/
CREATE INDEX 索引名称
    ON 表名(列名) INDEXTYPE IS CTXSYS.CONTEXT
    PARAMETERS('LEXER 自定义_lexer
                STORAGE 自定义_store
                MEMORY 50M');    //如果内存2g的话可改为100M
3.索引同步与优化(注意:text index 与普通索引不同,不是实时的)
SQL>ctxsys.ctx_ddl.sync_index('CTX_DEVICE_NOTICE_EVENT','10M');  //如果内存2g的话可改为100M,用于同步索引,要跟一段时间执行一次,比如15分钟.
SQL>ctxsys.ctx_ddl.optimize_index('CTX_DEVICE_NOTICE_EVENT','FULL');  //用于优化索引,一般一天执行一次就行.

4.查询方法
4.1
select * from DEVICE_NOTICE_EVENT
    where contains(SOURCE_NAME,'aaa')>0
等价于原来的
select * from DEVICE_NOTICE_EVENT
    where SOURCE_NAME like '%aaa%'
4.2
select * from DEVICE_NOTICE_EVENT
    where contains(SOURCE_NAME,'aaa & bbb')>0
等价于原来的
select * from DEVICE_NOTICE_EVENT
    where SOURCE_NAME like '%aaa%'  and SOURCE_NAME like '%bbb%'
4.3
select * from DEVICE_NOTICE_EVENT
    where contains(SOURCE_NAME,'aaa | bbb')>0
等价于原来的
select * from DEVICE_NOTICE_EVENT
    where SOURCE_NAME like '%aaa%'  or SOURCE_NAME like '%bbb%'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值