概要
クエリ句は、ステートメントの最も基本的で不可欠な部分です。クエリ句は、特定のインデックスフィールドに基づいてクエリする特定の内容を定義します。AND、OR、ANDNOT、RANKなどの論理演算子を使用して、複数のクエリ条件を指定し、それらの関係を定義できます。
たとえば、テーブルには、TEXTデータ型のtitleフィールドとsubjectフィールドが含まれています。これらのフィールドに基づいて、defaultという名前の複合インデックスを作成できます。ステートメントのクエリ句では、デフォルトインデックスと、titleフィールドまたはsubjectフィールドの用語で構成される検索クエリを指定して、検索クエリに一致するドキュメントをクエリできます。
また、titleフィールドに基づいてtitle_searchという名前のインデックスを作成することもできます。 title_searchインデックスに基づいてクエリを実行すると、システムは、titleフィールドの値が指定した検索クエリと一致するドキュメントのみを返します。
構文
単純なクエリ
構文:
query=Index name:'Search query'^boost Logical operator Index name:'Search query'^boost
インデックス名:クエリを実行する基になるインデックス。指定されたインデックスは、作成するインデックススキーマに含まれている必要があります。システムは、指定されたインデックスの作成基になったフィールドの値をスキャンし、フィールドの値が指定した検索クエリと一致するドキュメントを返します。
検索クエリ:検索するコンテンツ。
boost:検索クエリに指定する重み。このパラメータの値はINT型である必要があります。有効な値:[0,99]。 boostパラメータを設定しない場合、デフォルトのboost値は99です。
論理演算子:クエリ条件間の論理関係を定義するために使用する演算子。次の演算子がサポートされています:
()、AND、OR、ANDNOT、RANK。演算子は大文字で指定する必要があります。これらの演算子の優先順位は、次の順序です。RANK < OR < AND < ANDNOT < ()。AND:2つのクエリ条件の間にこの演算子を指定すると、システムは両方のクエリ条件に一致するドキュメントのみを返します。たとえば、query=default:'Mobile Phone' AND default:'Bluetooth句を使用して、Mobile PhoneとBluetoothを含むドキュメントをクエリできます。
OR:2つのクエリ条件の間にこの演算子を指定すると、システムは一方のクエリ条件に一致するドキュメントを返します。たとえば、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を含まない可能性のあるドキュメントをクエリできます。特定の検索クエリが関連性スコアを計算するために必要であり、これらの検索クエリがクエリ結果に影響を与えない場合、この演算子を使用できます。前の例では、default:'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 query"^boost Operator Index name:"Search query"^boost
フレーズクエリステートメントを作成するときは、各検索クエリを二重引用符(")で囲みます。フレーズクエリでは、すべての用語が接続され、分析の前後で同じ順序で配置されます。
二重引用符(
"")で囲まれた検索クエリはフレーズクエリです。フレーズクエリでは、すべての用語が接続され、分析の前後で同じ順序で配置されます。範囲クエリには、地理クエリと値範囲クエリが含まれます。
地理クエリ
構文:
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以上である必要があることに注意してください。 maxLAT値がminLAT値より小さい場合、システムは自動的に値を交換します。経度値については、minLONの値がmaxLONの値より小さい必要があります。指定されたminLONの値が指定されたmaxLONの値より大きい場合、結果は正しくありません。
多角形:polygon(LON1 LAT1,LON2 LAT2,LON3 LAT3,LON4 LAT4,...)形式で多角形を指定できます。凸多角形または凹多角形を指定できます。多角形の始点と終点は同じ点である必要があります。隣接する辺が同一線上にある場合、または辺が交差する場合、指定することはできません。
注:
指定するインデックスはSPATIAL型である必要があります。
円を定義するために使用する式は、一重引用符(')で囲む必要があります。例:query=spatial_index:'circle(130.0 10.0,1000.0)'。
線と多角形の点座標は、経度180度を横切る場合に関係なく、平面世界地図にマッピングされて、線クエリと多角形クエリの範囲が決定されます。位置フィールドの転置インデックスのクエリ結果は正確です。線と多角形フィールドの転置インデックスのクエリ結果はフィルタリングする必要があります。
値範囲クエリ
構文:
query=Index name:(Numeric 1,Numeric 2]
Numeric 1は値範囲の開始を指定し、Numeric 2は値範囲の終了を指定します。開端点と閉端点を使用して範囲を指定できます。サンプルコードでは、Numeric 1の前の開き括弧(はNumeric 1が開端点であることを指定し、Numeric 2の隣の閉じ括弧]はNumeric 2が閉端点であることを指定します。
例:
query=price:(3,100):3より大きく100より小さい値をクエリします。
query=price:[3,100]:3以上100以下の値をクエリします。
query=price:(3,100]:3より大きく100以下の値をクエリします。
query=price:(, 100):100より小さい値をクエリします。この句では、値範囲の開始は指定されていません。
注:
インデックスフィールドは数値型である必要があります。
指定されたフィールドの値は整数である必要があります。浮動小数点数はサポートされていません。
日付クエリ
構文:
query=Index name:(Start time,End time)。
開始時刻と終了時刻のタイムスタンプはINTEGER型であり、ミリ秒単位まで正確である必要があります。開始時刻を指定しない場合、システムは値0からスキャンを開始します。終了時刻を指定しない場合、デフォルト値4102416000000が使用されます。デフォルト値は、次のタイムスタンプを示します:2100-01-01 00:00。開端点と閉端点を使用して範囲を指定できます。
注:
インデックスフィールドはDATE型である必要があります。
タイムスタンプはINTEGER型であり、ミリ秒単位まで正確である必要があります。指定したタイムスタンプが4102416000000を超える場合、システムは4102416000000をタイムスタンプとして使用します。