最近做的项目要与Oracle打交道...并且要用到Oracle自带的"全文检索"
语法很简单(前提建好索引):
select * from 表名 where CONTAINS(列名,'要检索的关键字')>0
就OK了.
可是发现查询出来结果要远比:
select * from 表名 where 列名 like '%要检索的关键字%'
要少的多
但是如果用:
select * from 表名 where CONTAINS(列名,'%要检索的关键字%')>0
查询的结果是差不多了.可是速度却慢了很多??
从网上找了找也没找出什么结果,
后来发现是没有建Oracle的"词法分析器"
现在我把用Oracle全文检索的简单用法完整的说一遍:
建好表:
插入数据:
建基于中文的词法分析器:
语法:begin ctx_ddl.create_preference('分析器名称','chinese_vgram_lexer'); end;
建基于词法分析器的表索引:
语法:create index 索引名 on 表名 ( 列名 ) indextype is ctxsys.context parameters('lexer 分析器名称');
进行检索:
语法:select * from 表名 where CONTAINS(列名,'要检索的关键字')>0
-------------------------------------------------------------------------------------------------------
当然了.这是初步的检索.
比如你的表中插入或删除很多数据时,Oracle一般不会自动的与索引同步.这时就要重建索引............................
--索引的同步(重建)
begin ctx_ddl.sync_index('索引名' );
end;
--索引的优化
begin ctx_ddl.optimize_index('索引名' ,'FULL' );
end;
oracle 的全文检索,抄的,见笑了
最新推荐文章于 2024-07-09 06:12:17 发布