問合せアプリケーションは、エンド・ユーザー問合せを解析し、異なる演算子の組合せを使用して、1つ以上の方法で問合せ文字列を解釈することがあります。たとえば、ユーザーがkukui nutという問合せを入力すると、アプリケーションでは、再コールを増やすために、問合せ{kukui nut}および{kukui or nut}が入力されます。
クエリー・リライト機能を使用すると、元の問合せをリライトされたバージョンに拡張する単一の問合せを発行できます。これにより、重複のない結果が戻されます。
問合せテンプレート機能を使用して、リライトの順序を指定します。リライトされた問合せのバージョンは、CONTAINS
またはCATSEARCH
の単一のコールを使用して、効率的に実行されます。
次のテンプレートは、クエリー・リライトの順序を定義します。問合せ{kukui nut}は、次のようにリライトされます。
{kukui} {nut}
{kukui} ; {nut}
{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;