关于OracleText无法搜索单字的解决方法Oracle认证考试

文章作者 100test 发表时间 2009:04:10 00:19:11
来源 100Test.Com百考试题网


  最近的项目要做全文搜索,由于时间较紧,就选择了Oracle自带的全文组件OracleText,从定义索引器(CHINESE_VGRAM_LEXER),建立CTXCAT索引,使用CATSEARCH查询一切都很顺利地进行,但是当加上中文分词后总不经意地抛出异常,提示:
  ORA-29902:执行ODCIIndexStart() 例行程序中出错;
  ORA-20000:Oracle Text Error;
  DRG-10847:CATSEARCH 要求这种类型的查询有前缀索引;
  抛出异常时的SQL如下:
  0select*
  fromTableName
  wherecatsearch(ColumnName,中,null)>.0
  但是把搜索关键字的"中"替换为"中国"后,一切都是那么顺利。碰到问题,第一时间就Google去,但是找不到相关的文档说明和解决方案。
  Google上找不到(或者还没有找到),只有自己想办法了,既然说在列中没有前缀索引,就从这入手,几经艰辛,终于找到一个为索引建立前缀索引的方法:
  建立索引器使用如下代码:
  Begin
  ctx_ddl.0drop_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语句,结果如常!
  总结:
  OracleText要支持中文必须得用CHINESE_VGRAM_LEXER。
  要支持一个中文字以上的搜索,必须配置一个WordList,且把它的属性Prefix_Index配置为True。
  Oracle Text 不能直接在INTEGER,DATETIME等类型字段上建CTXCAT索引。
  希望能带给要用OracleText做全文搜索的朋友一点帮助。
  更多优质资料尽在百考试题论坛 百考试题在线题库 oracle/认证更多详细资料

相关文章


关于OracleText无法搜索单字的解决方法Oracle认证考试
PowerBuilder读取OracleClob字段内容Oracle认证考试
Oracle应用软件帮助企业实现管理变革Oracle认证考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛