oracle全文检索步骤

--第一步:解锁  ctxsys 进入system用户
alter user ctxsys account unlock; 
--第二步:赋予目标用户ctx_ddl包操作权限
grant execute on ctx_ddl to testuser;
--第三步:创建分词器
BEGIN
ctx_ddl.create_preference ('my_lexer', 'chinese_vgram_lexer');
--ctx_ddl.drop_preference('my_lexer');--删除分析器
END;
--第四步:创建过滤词组
BEGIN
 ctx_ddl.create_stoplist('my_stoplist');  
END;
--创建过滤词组成功以后,需要自定义需要过滤的词组
BEGIN
ctx_ddl.add_stopword('my_stoplist','有限公司'); 
ctx_ddl.add_stopword('my_stoplist','股份有限公司'); 
END;
--第五步:创建索引
--drop index ATTACH_GUARANTEE_INDEX ; --删除索引
--这句话的意思就是,在YU_TEST_INDEX表中的name字段上创建索引,索引类系那个为context类型,该索引用到的分析器为前面定义的my_lexer,该索引用到的过滤词组为前面定义得my_stoplist。
create index ATTACH_GUARANTEE_INDEX on ATTACH_GUARANTEE(ENT_NAME) indextype is CTXSYS.CONTEXT parameters('lexer my_lexer stoplist my_stoplist');
--6.使用索引
select * from ATTACH_GUARANTEE where contains(ENT_NAME,'重庆')>0; 
--7、用户输入关键词切词
 --删除MY_POLICY
-- BEGIN
--CTX_DDL.drop_policy('MY_POLICY'); 
  --END;

BEGIN
CTX_DDL.CREATE_POLICY('MY_POLICY', LEXER => 'my_lexer'); 
  END;
  --写一个oracle函数,来处理关键词切词:
   create or replace function p_split_chinese(p_input in varchar2) 
    return varchar2 as  
       v_tab CTX_DOC.TOKEN_TAB; 
       v_return VARCHAR2(323767); 
    begin 
       CTX_DOC.POLICY_TOKENS('my_policy',p_input,v_tab); 
       for i in 1..v_tab.count loop 
          v_return := v_return || ',' || v_tab(i).token; 
       end loop; 
      return LTRIM(v_return,','); 
     end;
 select  p_split_chinese('重庆天府') from dual  
--8、查询
 select count(*) from ATTACH_GUARANTEE WHERE contains(ENT_NAME,p_split_chinese('重庆天府'))>0;
--select count(*) from ATTACH_GUARANTEE WHERE contains(ENT_NAME,'重庆市,重庆,市,天府,重庆市天府')>0;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值