クエリ句は、検索対象、検索するインデックスフィールド、および AND、OR、ANDNOT、RANK などの演算子を使用して複数の条件を組み合わせる方法を定義します。
句の説明
クエリ句は、インデックスフィールドで何を検索するかを指定します。複数の条件を定義し、AND、OR、ANDNOT、RANK などの演算子と組み合わせることができます。
たとえば、title と subject のような 2 つの TEXT フィールドを組み合わせて、default という名前の共通インデックスを作成できます。default インデックスに対するクエリは、検索クエリが title または subject フィールドのテキストに一致するドキュメントを取得します。
title フィールドに対して title_search という名前の別のインデックスを作成した場合、そのインデックスに対するクエリは、検索クエリが title フィールドのテキストに一致する場合にのみドキュメントを取得します。
構文
単純なクエリ
構文:
query=index_name:'search_query'^boost search_condition index_name:'search_query'^boost
-
index_name:インデックススキーマで設定されたインデックス。このインデックスのソースフィールドで検索を行い、検索クエリを含むドキュメントを検索します。
-
search_query:検索するコンテンツ。
-
boost:検索クエリの重み。値は 0 から 99 までの整数である必要があります。このパラメーターを指定しない場合、デフォルト値は 99 です。
-
search_condition:1 つ以上の検索条件。サポートされている演算子は、優先度の昇順で
RANK、OR、AND、ANDNOT、および()です。演算子は大文字にする必要があります。 -
AND:両方の検索クエリに一致するドキュメントを検索します。たとえば、
query=default:'mobile phone' AND default:'bluetooth'は、"mobile phone" と "bluetooth" の両方を含むドキュメントを取得します。 -
OR:少なくとも一方の検索クエリに一致するドキュメントを検索します。たとえば、
query=default:'mobile phone' OR default:'bluetooth'は、"mobile phone" または "bluetooth" を含むドキュメントを取得します。 -
ANDNOT:最初の検索クエリには一致し、2 番目の検索クエリには一致しないドキュメントを検索します。たとえば、
query=default:'mobile phone' ANDNOT default:'bluetooth'は、"mobile phone" を含むが "bluetooth" を含まないドキュメントを取得します。 -
RANK:2 番目の検索クエリに一致するかどうかに関係なく、最初の検索クエリに一致するドキュメントを検索します。たとえば、
query=default:'mobile phone' RANK default:'bluetooth'は、"mobile phone" を含むドキュメントを取得しますが、"bluetooth" を含む必要はありません。この演算子は、クエリがスコアリングには影響を与えるが、取得には影響を与えない場合に使用します。テキストの関連性計算と組み合わせることで、「bluetooth」を含むドキュメントをより高くランク付けできます。
高度なクエリ
単一インデックス名を使用した複数クエリ
構文:
query=index_name:'search_query'^boost | 'search_query'^boost
query=index_name:'search_query'^boost & 'search_query'^boost
縦棒 (|) は OR 演算子を表し、アンパサンド (&) は AND 演算子を表します。
フレーズクエリ
構文:
query=index_name:"search_term"^boost OPERATOR index_name:"search_term"^boost
検索クエリを二重引用符 ("") で囲むとフレーズクエリになります。これにより、トークン化された用語が隣接し、同じ順序であることが要求されます。
-
フレーズクエリを実行するには、検索クエリを二重引用符 (
"") で囲みます。フレーズクエリは、トークン化後に隣接し、同じ順序である用語に一致します。 -
範囲クエリには、地理データと数値データのクエリが含まれます。
weakand クエリ
構文:
query=index_name:('search_query'||'search_query')^number
query=index_name:('search_query')^^number
weakand クエリは、長い検索クエリの一部にのみ一致するドキュメントを取得します。一致する必要がある用語の最小数を 2 つの方法で指定できます。クエリを送信する前にトークン化する場合は、^ 演算子を使用して、一致する用語の正確な最小数を指定します。DPI エンジンがクエリをトークン化し、事前に用語の数がわからない場合は、^^ 演算子を使用して最小一致率を設定します。^^ の number パラメーターは、1000 分の 1 単位の値です。一致する用語の最小数は (トークン化後の用語数 × number / 1000.0) として計算され、結果は切り上げられます。
weakand クエリは、AND クエリと OR クエリの中間の動作をします。一致する用語の最小数が増えるにつれて、パフォーマンスが向上します。
注: weakand クエリ機能はデフォルトで無効になっています。この機能を使用するには、テクニカルサポートにお問い合わせください。
ジオクエリ
構文:
query=index_name:'SHAPE(ARGS...)'
SHAPE(ARGS...) は、次のいずれかになります。
-
点:
point(LON LAT)。LONは経度、LATは緯度です。スペースで区切ります。 -
円:
circle(LON LAT,Radius)。LONは経度、LATは緯度、Radiusはメートル単位の半径です。 -
長方形:
rectangle(minLON minLAT,maxLON maxLAT)。緯度の場合、maxLATはminLAT以上である必要があります。順序を逆にすると、値は自動的に調整されます。経度の場合、minLONからmaxLONまでの範囲は西から東に解釈されます。順序を逆にすると、範囲が不正確になります。 -
多角形:
polygon(LON1 LAT1,LON2 LAT2,LON3 LAT3,LON4 LAT4,...)。多角形は凸型または凹型にすることができます。始点と終点は同じである必要があります。隣接するエッジは同一直線上にあってはなりません。多角形のエッジは自己交差してはなりません。
注:
-
クエリのインデックスは空間タイプである必要があります。
-
空間インデックスに対するクエリでは、図形を単一引用符 (
') で囲みます。例:query=spatial_index:'circle(130.0 10.0,1000.0)'。 -
線と多角形の座標は、範囲を定義するために平面世界地図にマッピングされます。システムは、180 度子午線をまたぐ図形を考慮しません。
locationインデックスのクエリ結果は正確です。lineおよびpolygonインデックスの結果では、行フィルタリングが必要です。
数値範囲クエリ
構文:
query=index_name:(value1,value2]
value1 と value2 は、数値範囲の開始と終了を表します。範囲クエリは開区間と閉区間をサポートします。丸括弧「(」 は開区間を、角括弧「]」 は閉区間を示します。
例:
開区間: query = price:(3,100)。このクエリは、3 < x < 100 のデータを取得します。
閉区間: query = price:[3,100]。このクエリは、3 <= x <= 100 のデータを取得します。
半開区間: query = price:(3,100]。このクエリは、3 < x <= 100 のデータを取得します。
開始値が未指定: query=price:(,100)。このクエリは、x < 100 のデータを取得します。
注:
-
クエリのインデックスは数値範囲タイプである必要があります。
-
値は整数である必要があります。浮動小数点数はサポートされていません。
日付クエリ
構文:
query=index_name:(start_time,end_time]
開始時刻と終了時刻は、ミリ秒単位の整数の UNIX タイムスタンプです。開始時刻を指定しない場合、検索は 0 から始まります。終了時刻を指定しない場合、デフォルト値は 4102416000000 で、これは 2100-01-01 00:00:00 に相当します。日付クエリは、開区間と閉区間もサポートします。
注:
-
クエリのインデックスは日付タイプである必要があります。
-
タイムスタンプはミリ秒単位の整数である必要があります。値が 4102416000000 を超える場合、4102416000000 として処理されます。