当前所在位置:珠峰网资料 >> 计算机 >> Oracle认证 >> 正文
如何解决OracleText无法搜索单字的问题
发布时间:2009/9/28 17:11:59 来源:www.xue.net 编辑:城市总裁吧
  最近的项目要做全文搜索,由于时间较紧,就选择了Oracle自带的全文组件OracleText,从定义索引器(CHINESE_VGRAM_LEXER),建立CTXCAT索引,使用CATSEARCH查询一切都很顺利地进行,但是当加上中文分词后总不经意地抛出异常,提示:
  ORA-29902:执行ODCIIndexStart() 例行程序中出错;
  ORA-20000:Oracle Text Error;
  DRG-10847:CATSEARCH 要求这种类型的查询有前缀索引;
  抛出异常时的SQL如下:
  select*
  fromTableName
  wherecatsearch(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;
  建立索引的代码如下:
  CreateINDEXindexNameontableName(columnName)indextypeisctxsys.CTXCATparameters('lexermydb.chinese_lexerwordlistmydb.chinesewordlist');
  再执行上面出错的SQL语句,结果如常!
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved