应用场景,对千万数据进行多条件搜索时,一般的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 等相关通配
- 不支持特殊字符
数字也是这种情况。特殊字符串也只能转义。
全文检索的其它几种方式就不在这儿说了。我也只是总结一下这个情况的使用。