2

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

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

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

查询重写功能使您能够提交将原始查询扩展为重写版本的单个查询。结果返回没有重复。

您可以使用查询模板功能指定重写序列。只需调用一次 CONTAINS 或 CATSEARCH 即可有效地执行重写后的查询版本。

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

{kukui} {坚果}

{kukui} ; {坚果}

{kukui} 和 {nut}

{kukui}累积{坚果}

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

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;
4

1 回答 1

3

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

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

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

于 2013-02-13T08:13:38.947 回答