oracle中文全文索引简单使用

应用场景,对千万数据进行多条件搜索时,一般的like,instr效率就很慢,查了一下oracle的全文索引不错,这里简单说明一下中文全文检索的使用

中文全文索引创建
如果再创建时报错,可能是没有权限,用DBA账号登录,赋予登录账号ctx_ddl权限

select t.*, t.rowid from T2_TEMP t for update

SELECT  t.id, t.rn  FROM (select id,row_number() 
over(partition by t1.sroce order by t1.sroce desc) rn from T2_TEMP t1) t where  t.rn >1 




BEGIN
  ctx_ddl.create_preference ('my_chinese_lexer', 'CHINESE_VGRAM_LEXER');
END;

drop  index IX_BASE_LEGAL_IDENTITY_NA3


CREATE INDEX zd  ON T2_TEMP (name) indextype is ctxsys.context parameters('lexer my_chinese_lexer');
 
select * from user_indexes;
 
select * from T2_TEMP  t where   contains(t.name,'张东')>0 
 


首先创建名称为my_chinese_lexer 的全文索引
BEGIN
  ctx_ddl.create_preference ('my_chinese_lexer', 'CHINESE_VGRAM_LEXER');
END;
然后创建表的索引 指向 全文索引(表名和字段名请自己替换)
CREATE INDEX  索引名称  ON 表名 (字段) indextype is ctxsys.context parameters('lexer my_chinese_lexer');
使用
select * from my_table t where contains(t.name,'美国总统 ')  >0
其中搜索条件支持通配的查询,多个条件时就用and 连接 如 contains(t.字段,‘美国总统 and 特朗普’)

同时也支持 %如 (‘%美国总统%’),

如果业务场景是存储的大文本的内容,那么可以考虑使用 !,$ ,  ? , near 等相关通配

不支持特殊字符
这个或许是最关键的,不支持数字,以及中文以外的文字和符号,比如英文 abc 单独搜a可能搜不出来,只所以用可能来描述,是因为有的字母确实搜不出来。但有的单独搜却能搜出来,底层逻辑不得而知,他会把一连串的英文看做为一个字。
数字也是这种情况。特殊字符串也只能转义。


原文:https://blog.csdn.net/rola0418/article/details/79316523 
版权声明:本文为博主原创文章,转载请附上博文链接!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值