2013-02-13 24 views
2

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

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

查询应用程序有时解析端用户查询,在使用不同的算子的组合 一种或多种方式解释一个 查询字符串。例如,如果用户输入kukui nut的查询,则您的应用程序可能会输入查询{kukui nut}和{kukui或nut}以提高回忆率。

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

您可以使用查询模板功能指定您的重写序列。 通过对CONTAINS或CATSEARCH的单个调用 高效地执行查询的重写版本。

以下模板定义了一个查询重写序列。 {夏威夷核果}的查询如下重写:

{库奎} {螺母}

{库奎}; {螺母}

{库奎}和{螺母}

{库奎} ACCUM {螺母}

查询重写模板这些变化如下:

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; 

回答

3

有Oracle提供的示例中有一个错误。至关重要的是,查询运营商之间用空格分隔:

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

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