検索語の修飾子¶
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 など) も指定できます。