Oracle Text查询重写模板不起作用

时间:2013-02-13 08:13:39

标签: oracle oracle-text

为什么Oracle文档中的两个最后重写规则不起作用?

来源http://docs.oracle.com/cd/B28359_01/text.111/b28303/query.htm#i1007557

  

查询应用程序有时会解析最终用户查询,解释a   使用不同的运算符以一种或多种方式查询字符串   组合。例如,如果用户输入kukui坚果的查询,您的   应用程序可能会输入查询{kukui nut}和{kukui或nut}来查询   增加召回。

     

使用查询重写功能可以提交单个查询   将原始查询扩展为重写版本。结果   返回时没有重复。

     

使用查询模板功能指定重写序列。   使用a有效地执行查询的重写版本   单次呼叫CONTAINS或CATSEARCH。

     

以下模板定义了查询重写序列。查询   {kukui nut}改写如下:

     

{kukui} {nut}

     

{kukui}; {螺母}

     

{kukui} AND {nut}

     

{kukui} ACCUM {nut}

     

这些转换的查询重写模板如下:

select id from docs where CONTAINS (text,
 '<query>
   <textquery lang="ENGLISH" grammar="CONTEXT"> kukui nut
     <progression>
       <seq><rewrite>transform((TOKENS, "{", "}", " "))</rewrite></seq>
       <seq><rewrite>transform((TOKENS, "{", "}", " ; "))</rewrite></seq>
       <seq><rewrite>transform((TOKENS, "{", "}", "AND"))</rewrite></seq>
       <seq><rewrite>transform((TOKENS, "{", "}", "ACCUM"))</rewrite></seq>
     </progression>
   </textquery>
  <score datatype="INTEGER" algorithm="COUNT"/>
</query>')>0;

1 个答案:

答案 0 :(得分:3)

Oracle提供的示例中存在错误。查询运算符必须用空格分隔:

<seq><rewrite>transform((TOKENS, "{", "}", " AND "))</rewrite></seq>
<seq><rewrite>transform((TOKENS, "{", "}", " ACCUM "))</rewrite></seq>

所以“AND”和“ACCUM”而不是文档中的“AND”和“ACCUM”。