すべてのプロダクト
Search
ドキュメントセンター

OpenSearch:SQL ステートメント

最終更新日:Dec 28, 2024

クエリ句

クエリ句は、ステートメントの最も基本的で不可欠な部分です。クエリ句は、特定のインデックスフィールドに基づいてクエリする具体的な内容を定義します。複数のクエリ条件を指定し、AND、OR、ANDNOT、RANK などの論理演算子を使用してそれらの関係を定義できます。

たとえば、テーブルには TEXT データ型の title フィールドと subject フィールドが含まれています。これらのフィールドに基づいて、default という名前の複合インデックスを作成できます。ステートメントのクエリ句では、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 です。

  • 論理演算子: クエリ条件間の論理関係を定義するために使用する演算子。次の演算子がサポートされています: ()ANDORANDNOTRANK。演算子は大文字で指定する必要があります。これらの演算子の優先順位は、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 Logical 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 をタイムスタンプとして使用します。