该全文检索是建立在数据库层面的,只在企业级应用开发中使用过。
使用后,大数据量下会导致数据插入、变更的效率降低,而且涉及定时器同步、刷新索引,对资源的消耗较高,并可能影响数据库表同步操作。
所以,仅用作学习研究。
核心为oracle的about('xxx')函数,前期的操作及定时器,都是此函数做准备的。
更高效、有效、符合语言习惯的全文检索解决方案,推荐Lucene、solr。
--1.授权
grant ctxapp to rili
grant execute on ctx_ddl to rili
--2.使用应用用户连接,创建域索引
begin ctx_ddl.create_preference('club_lexer','chinese_vgram_lexer');
end;
--(1)项目名称索引
create index index_xmmc
on rili.office_hitachi_yyxmdj (xmdj_xmmc )
indextype is ctxsys.context;
--(2)用户名称索引
create index index_yhmc
on rili.office_hitachi_yyxmdj (xmdj_yhmc )
indextype is ctxsys.context ;
--删除某个索引
DROP INDEX index_xmmc
--查询格式
SELECT score(1) s , xmdj_xmmc d from rili.office_hitachi_yyxmdj
WHERE CONTAINS (xmdj_xmmc,'about(测试)',1)> 1
select score(1) s,xmdj_yhmc yh from rili.office_hitachi_yyxmdj
where contains (xmdj_yhmc,'about(测试)',1)>1
select xiangmubianhao,xmdj_xmmc,xmdj_yhmc,xmdj_xmdz from rili.office_hitachi_yyxmdj e where
xmdj_xmmc in
(SELECT xmdj_xmmc d from rili.office_hitachi_yyxmdj
WHERE CONTAINS (xmdj_xmmc,'about(测试)',1)> 1 )
and xmdj_yhmc in
( select xmdj_yhmc yh from rili.office_hitachi_yyxmdj
where contains (xmdj_yhmc,'about(测试)',1)>1)
and xiangmubianhao is not null
order by e.xmdj_xmbhnian asc,e.xmdj_xmbhhao asc
--索引同步于优化(使用 job定时工作)需要在cmd 中 sqlplus 下执行。
--(1) 创建过程
--项目名称过程
create or replace procedure pro_index_xmmc as
begin
ctx_ddl.sync_index('index_xmmc');
end;
/
--用户名称过程
create or replace procedure pro_index_yhmc as
begin
ctx_ddl.sync_index('index_yhmc');
end;
/
--(2 )job定时工作
VARIABLE jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno,'pro_index_yhmc();',
SYSDATE, 'SYSDATE +1/(60*24*60)');
commit;
END;
/
--删除触发与定时工作
drop procedure hsp_sync_index