Oracle全文检索功能实现的尝试试验

      不使用ORacle text功能,也有很多方法可以在Oracle数据库中搜索文本.可以使用标准的INSTR函数和LIKE操作符实现。
             SELECT *FROM mytext WHERE INSTR (thetext, 'Oracle') > 0;
             SELECT * FROM mytext WHERE thetext LIKE '%Oracle%';
      有很多时候,使用instr和like是很理想的, 特别是搜索仅跨越很小的表的时候.然而通过这些文本定位的方法将导致全表扫描,对资源来说消耗比较昂贵,而且实现的搜索功能也非常有限,因此对海量的文本数据进行搜索时,建议使用oralce提供的全文检索功能 建立全文检索的。

 

以下是自己结合网上资料慢慢尝试得到的一些经历体验:
一,Oracle数据库全文索引设置
首先检查数据库中是否有CTXSYS用户和CTXAPP脚色。如果没有这个用户和角色,意味着你的数据库创建时未安装intermedia功能。你必须修改数据库以安装这项功能。 默认安装情况下,ctxsys用户是被锁定的,因此要先启用ctxsys的用户。
      关于Oracle数据库全文索引设置的详细步骤可以参考网上的资料http://fanqiang.chinaunix.net/db/oracle/2007-01-31/4851.shtml
二,设置索引
如果没有设置索引,执行以下sql语句
select * from system.test411 t where contains(t.txt2,'幻灯')>0

会出现以下错误:

                ORA-20000:Oracle Text error:
                DRG-10599:列没有编制索引

所以要先设置索引,使用以下语句:
CREATE INDEX TXT2_NAME
          ON SYSTEM.TEST411 (TXT2)
INDEXTYPE IS CTXSYS.CONTEXT
这样同样会出现错误提示:
      ORA-29855: 执行 ODCIINDEXCREATE 例行程序时出错
  ORA-20000: Oracle Text 错误:
  DRG-50857: oracle error in drixtab.create_index_tables
  ORA-01031: 权限不足
  ORA-06512: 在"CTXSYS.DRUE", line 157
  ORA-06512: 在"CTXSYS.TEXTINDEXMETHODS", line 204

关于此错误的解决方法如下:
SQL> ALTER SYSTEM SET O7_DICTIONARY_ACCESSIBILITY = TRUE SCOPE = SPFILE;
重新启动oracle,再执行就OK了。如果想看详细的错误解释及解决方案,可参考网上资

料:http://www.wangchao.net.cn/bbsdetail_1794410.html

三,设置词法分析器(lexer)
此不不是必须的,系统默认的分析器为basic_lexer,这是指针对英文的分析器,因此如

果是检索中文的词语,比如select * from system.test411 t where contains

(t.txt2,'幻灯')>0; 是检索不出来的,因此需要更改词法分析器。
首先执行以下sql
    exec ctx_ddl.create_preference ('my_lexer', 'chinese_vgram_lexer');
然后执行
CREATE INDEX TXT2_NAME ON SYSTEM.TEST411 (TXT2)
INDEXTYPE IS CTXSYS.CONTEXT
parameters('lexer my_lexer');
这样就把分析器设为chinese_vgram_lexer——汉语分析器。

PS:以上的sql语句如果在PLSQL Developer中出错时,就直接用oracle的SQL*Plus。

 

另外介绍几个常用语句
(1)select

INDEX_NAME,TABLE_OWNER,TABLE_NAME,STATUS,ITYP_OWNER,ITYP_NAME,DOMIDX_STATUS,D

OMIDX_OPSTATUS from user_indexes where ITYP_NAME is not null;
察看所建索引情况。
(2)drop index TXT2_NAME force
删除索引。

 

此外还有一些有用小资料,都是我自己走弯路时的参考,如今看来与主方向也没多少关

系了,不过还是列出来以防忘记:
CONTAINS语法使用问题: http://blog.oracle.com.cn/html/41/t-117041.html
ORA-29861: 域索引标记为 LOADING/FAILED/UNUSABLE:

http://www.eampub.com/thread-269-1-1.html
ora-01867 间隔无效:http://polestar123.itpub.net/post/4606/475170
ORA-29855:http://gis8.blog.sohu.com/81184382.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值