oracle中文全文索引简单使用

时间:2021-10-15 06:24:28

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

  • 中文全文索引创建

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

首先创建名称为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可能搜不出来,只所以用可能来描述,是因为有的字母确实搜不出来。但有的单独搜却能搜出来,底层逻辑不得而知,他会把一连串的英文看做为一个字。

数字也是这种情况。特殊字符串也只能转义。

全文检索的其它几种方式就不在这儿说了。我也只是总结一下这个情况的使用。