Oracle 9i 全文检索简单配置方式

Oracle 9i 全文检索简单配置方式
1、先决条件
   Oracle 9I 默认全部支持,具体如下
   系统中存在CTXSYS用户及CTXAPP角色,
   监听程序支持全文检索,如下
   # LISTENER.ORA Network Configuration File: D:/oracle/ora92/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
      )
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = server)(PORT = 1521))
      )
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = D:/oracle/ora92)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = server)
      (ORACLE_HOME = D:/oracle/ora92)
      (SID_NAME = server)
    )
  )
2、设置语法分析器
   在CTXSYS下,默认使用的是basic_lexer,对英文支持比较好,为支持中文,做如下设置
   begin ctx_ddl.create_preference('my_lexer','chinese_vgram_lexer'); end;
3、实例
   在用户search下search_catalog表的page_desc,link_tile需要进行全文检索,如下
   create index index_text on search_catalog(page_desc) indextype is ctxsys.context parameters('lexer ctxsys.my_lexer');
   create index index_title on search_catalog(link_title) indextype is ctxsys.context parameters('lexer ctxsys.my_lexer');
  
   //可以修改index 的存储空间,最简单的方法是创建在其他用户的默认存储空间上
   grant create any index to "search";
   grant alter any index to "search";
   create index shiyq_index.index_text on search_catalog(page_desc) indextype is ctxsys.context parameters('lexer ctxsys.my_lexer');
   create index shiyq_index.index_title on search_catalog(link_title) indextype is ctxsys.context parameters('lexer ctxsys.my_lexer');
   //可以定制存储空间
  
   同步(当原始数据变化时,索引不会自动重建,所以需要手工同步)
   alter index index_text rebuild online parameters('sync');
   alter index index_title rebuild online parameters('sync');
   或
   alter index shiyq_index.index_text rebuild online parameters('sync');
   alter index shiyq_index.index_title rebuild online parameters('sync');
     
4、结果
select t.*, t.rowid from search_catalog t
where instr(t.page_desc,'健康')>0

select * from search_catalog where contains(page_desc,'健康')>0

5、补遗:
   这种情况下当检索一个单词的时候,会使用两个字段的全文检索,使用and ,or 来连接,这样性能比较低,
   而且容易造成cpu的瓶颈,所以可以将两个字段合为一个,如将link_title增加到page_desc的后面,然后
   Sql由
   select * from search_catalog t where contains(t.link_title,'健康')>0 and contains (t.page_desc,
   '健康')>0
   修改为
   select * from search_catalog t where contains(t.page_desc,'健康')>0
   如果搜索多个单词,可以用逻辑符号,如 逻辑与(and 或 & ),逻辑或(or 或 | ),逻辑非(not 或 ~),可以
   用括号组织
   如搜索包含“健康”,“药品”或“产品”,但不包含“海虹”的数据
   select * from search_catalog t where contains(t.page_desc,'( 健康 & ( 药品 | 产品) ) ~ 海虹 ')>0 

 参考了玉面飞龙的大作,这篇文章非常好,我写的非常简单,有问题可以去看看http://epub.itpub.net/4/1.htm

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值