网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 设计资源 > 数据库 > 正文

Oracle中Text无法搜索单字的解决方法

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

最近的项目要做全文搜索,由于时间较紧,就选择了Oracle自带的全文组件OracleText,从定义索引器(CHINESE_VGRAM_LEXER),建立CTXCAT索引,使用CATSEARCH查询一切都很顺利地进行,但是当加上中文分词后总不经意地抛出异常,提示:

ORA-29902:执行ODCIIndexStart() 例行程序中出错;
ORA-20000:Oracle Text Error;
DRG-10847:CATSEARCH 要求这种类型的查询有前缀索引;
抛出异常时的SQL如下:
 

select *
from TableName
where catsearch(ColumnName,'中',null) > 0


但是把搜索关键字的"中"替换为"中国"后,一切都是那么顺利。碰到问题,第一时间就Google去,但是找不到相关的文档说明和解决方案。

Google上找不到(或者还没有找到),只有自己想办法了,既然说在列中没有前缀索引,就从这入手,几经艰辛,终于找到一个为索引建立前缀索引的方法:

建立索引器使用如下代码:
 

Begin
ctx_ddl.drop_preference ('mydb.CHINESE_LEXER');
ctx_ddl.create_preference ('mydb.CHINESE_LEXER', 'CHINESE_VGRAM_LEXER');
ctx_ddl.create_preference('mydb.ChineseWordList', 'BASIC_WORDLIST');
ctx_ddl.set_attribute('mydb.ChineseWordList','PREFIX_INDEX','TRUE');
ctx_ddl.set_attribute('mydb.ChineseWordList','PREFIX_MIN_LENGTH',1);
ctx_ddl.set_attribute('mydb.ChineseWordList','PREFIX_MAX_LENGTH', 5);
ctx_ddl.set_attribute('mydb.ChineseWordList','SUBSTRING_INDEX', 'YES');
END;


建立索引的代码如下:
 

Create INDEX indexName on tableName(columnName) indextype is ctxsys.CTXCAT parameters('lexer mydb.chinese_lexer wordlist mydb.chinesewordlist');


再执行上面出错的SQL语句,结果如常!

总结:

OracleText要支持中文必须得用CHINESE_VGRAM_LEXER。
要支持一个中文字以上的搜索,必须配置一个WordList,且把它的属性Prefix_Index配置为True。
Oracle Text 不能直接在INTEGER,DATETIME等类型字段上建CTXCAT索引。
希望能带给要用OracleText做全文搜索的朋友一点帮助。
 

  • 下一篇资讯: DB2数据库移植常见问题
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师