検索語の修飾子

Lucene では、クエリ語の修飾がサポートされており、広範な検索オプションが提供されています。

  • ワイルドカード検索 Lucene では、1 文字および複数文字のワイルドカード検索がサポートされています。

    1 文字のワイルドカード検索を実行するには、 ? 記号を使用します。

    複数文字のワイルドカード検索を実行するには、 * 記号を使用します。

    1 文字のワイルドカード検索では、「?」を任意の 1 文字に置き換えて、残りの指定文字に一致する語を検索します。たとえば、「text」または「test」を検索するには、次の検索を使用できます。

    te?t
    

    複数文字のワイルドカード検索では、「*」を 0 個以上の任意の文字に置き換えて、残りの指定文字に一致する語を検索します。たとえば、「test」、「tests」、または「tester」を検索するには、次の検索を使用できます。

    test*
    

    単語の中でワイルドカード検索を使用することもできます。

    te*t
    

    注釈

    * 記号や ? 記号を検索語の先頭文字として使用することはできません。

  • あいまい検索

    Lucene では、レーベンシュタイン距離 (編集距離) アルゴリズムに基づくあいまい検索がサポートされています。あいまい検索を実行するには、1 つの単語の末尾にチルダ (波形ダッシュ) 記号 ~ を付けます。たとえば、スペルが「roam」と似ている語を検索するには、次のあいまい検索を使用します。

    roam~
    

    この検索では、foam や roams のような語が検出されます。

    追加 (オプション) のパラメーターを使用して、必要な類似度を指定することもできます。値は 0 ~ 1 の範囲で指定します。1 に近い値ほど、より類似度の高い語にのみ一致します。次に例を示します。

    roam~0.8
    

    このパラメーターを指定しないと、デフォルト値 0.5 が使用されます。

  • 近接検索

    Lucene では、特定の距離内にある複数の語の検索がサポートされています。近接検索を実行するには、語句の末尾にチルダ記号 ~ を付けます。たとえば、ドキュメント内に 10 文字以内の間隔で存在する「apache」と「jakarta」を検索するには、次の検索を使用します。

    "jakarta apache"~10
    
  • 範囲検索

    範囲クエリでは、このクエリで指定した上限と下限の範囲内にあるフィールド値を含むドキュメントを検索することができます。範囲クエリでは、上限と下限を含めることも、除外することもできます。ソートは辞書順で行われます。

    mod_date:[20020101 TO 20030101]
    

    上記の検索では、mod_date フィールドの値が 20020101 から 20030101 (各値を含む) の範囲にあるドキュメントを検索します。なお、範囲クエリは日付フィールド専用ではありません。日付以外のフィールドにも使用できます。

    title:{Aida TO Carmen}
    

    上記の検索では、title の値が「Aida」から「Carmen」の間にあるすべてのドキュメント (ただし「Aida」と「Carmen」は含まない) を検索します。

    上限と下限を含むクエリは角括弧で指定し、これらを含まないクエリは中括弧で指定します。

  • 検索語のブースト

    Lucene では、見つかった語に基づいて、一致ドキュメントの関連度が示されます。特定の検索語をブーストする (優先する) には、その語の末尾にキャレット文字 ^ とブースト係数 (数値) を付けます。ブースト係数が高いほど、その語の関連性は高まります。

    ドキュメントの検索語をブーストすることによって、ドキュメントの関連性を制御できます。たとえば、次の検索を行うとします。

    jakarta apache
    

    この中で「jakarta」という語の関連性を高めたい場合は、この語の横に ^ 記号とブースト係数を付けてブーストします。

    jakarta^4 apache
    

    それにより、jakarta という語を含むドキュメントの関連性が引き上げられます。また、次の例のように語句をブーストすることもできます。

    "jakarta apache"^4 "jakarta lucene"
    

    デフォルトではブースト係数は 1 です。ブースト係数は正数でなければなりませんが、1 未満 (0.2 など) も指定できます。