不使用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