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

OpenSearch:query 句

最終更新日:Dec 28, 2024

概要

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

たとえば、テーブルに TEXT 型の title フィールドと subject フィールドが含まれているとします。これらのフィールドに基づいて、default という名前の複合インデックスを作成できます。ステートメントの query 句では、default インデックスと、title フィールドまたは subject フィールドの用語で構成される検索クエリを指定して、検索クエリに一致するドキュメントをクエリできます。

また、title フィールドに基づいて title_search という名前のインデックスを作成することもできます。 title_search インデックスに基づいてクエリを実行すると、システムは title フィールドの値が指定した検索クエリに一致するドキュメントのみを返します。

構文

単純なクエリ

構文:

query=インデックス名:'検索クエリ'^ブースト 論理演算子 インデックス名:'検索クエリ'^ブースト

  • インデックス名: クエリを実行する基になるインデックス。指定されたインデックスは、作成したインデックススキーマに含まれている必要があります。システムは、指定されたインデックスの作成基になったフィールドの値をスキャンし、フィールドの値が指定した検索クエリに一致するドキュメントを返します。

  • 検索クエリ: 検索するコンテンツ。

  • ブースト: 検索クエリに指定する重み。このパラメータの値は INT 型である必要があります。有効な値: [0,99]。 boost パラメータを指定しない場合、デフォルトのブースト値は 99 です。

  • 論理演算子: クエリ条件間の論理関係を定義するために使用する演算子。次の演算子がサポートされています: ()ANDORANDNOTRANK。演算子は大文字で指定する必要があります。これらの演算子の優先順位は、RANK < OR < AND < ANDNOT < () の順です。

  • AND: 2 つのクエリ条件の間にこの演算子を指定すると、システムは両方のクエリ条件に一致するドキュメントのみを返します。たとえば、query=default:'携帯電話' AND default:'Bluetooth' 句を使用して、携帯電話と Bluetooth を含むドキュメントをクエリできます。

  • OR: 2 つのクエリ条件の間にこの演算子を指定すると、システムは一方のクエリ条件に一致するドキュメントを返します。たとえば、query=default:'携帯電話' OR default:'Bluetooth' 句を使用して、携帯電話または Bluetooth を含むドキュメントをクエリできます。

  • ANDNOT: 2 つのクエリ条件の間にこの演算子を指定すると、システムは左の条件のみに一致するドキュメントを返します。たとえば、query=default:'携帯電話' ANDNOT default:'Bluetooth' 句を使用して、携帯電話を含み、Bluetooth を含まないドキュメントをクエリできます。

  • RANK: 2 つの条件の間にこの演算子を指定すると、システムは左の条件に一致し、右の条件に一致しない可能性のあるドキュメントを返します。たとえば、query=default:'携帯電話' RANK default:'Bluetooth' 句を使用して、携帯電話を含み、Bluetooth を含まない可能性のあるドキュメントをクエリできます。特定の検索クエリが関連性スコアの計算に必要であり、これらの検索クエリがクエリ結果に影響しない場合は、この演算子を使用できます。前の例では、default:'Bluetooth' 条件を使用して、ドキュメント内のテキストに基づいて関連性スコアを計算します。この場合、Bluetooth を含むドキュメントには高いランクが割り当てられます。

高度なクエリ

同じインデックスに基づいて複数の検索クエリを指定する

構文:

query=インデックス名:'検索クエリ'^ブースト | '検索クエリ'^ブースト

query=インデックス名:'検索クエリ'^ブースト & '検索クエリ'^ブースト

縦棒 (|) は OR 演算子を指定します。アンパサンド (&) は AND 演算子を指定します。

フレーズクエリ

構文:

query=インデックス名:"検索クエリ"^ブースト 論理演算子 インデックス名:"検索クエリ"^ブースト

二重引用符 (") で囲まれた検索クエリはフレーズクエリです。フレーズクエリでは、すべての用語が接続され、分析の前後で同じ順序で配置されます。

  • フレーズクエリステートメントを記述する場合は、各検索クエリを二重引用符 (") で囲みます。フレーズクエリでは、すべての用語が接続され、分析の前後で同じ順序で配置されます。

  • 範囲クエリには、地理クエリと値範囲クエリが含まれます。

Weakand クエリ

構文:

query=インデックス名:('検索クエリ'||'検索クエリ')^数値

query=インデックス名:('検索クエリ')^^数値

使用する検索クエリが長い場合は、weakand クエリを使用して、検索クエリの分析後に一部の用語のみを含むドキュメントを取得できます。ドキュメントに含まれる用語の最小数を指定するには、次のいずれかの方法を使用できます。検索クエリを手動で分析する場合は、^数値を使用してドキュメントに含まれる用語の最小数を直接指定します。または、検索エンジンが検索クエリを分析する場合は、^^数値を使用してドキュメントに含まれる用語の比率を指定します。クエリステートメントを ^^数値形式で記述する場合は、数値を小数点以下 3 桁を含む比率に設定します。この場合、ドキュメントに含まれる用語の最小数は、分析後の用語の総数を指定された比率で乗算し、結果を最も近い整数に丸めることによって計算されます。この方法は、分析後の用語の総数が非常に多い場合に適用できます。

Weakand クエリは、すべてのクエリ条件が AND または OR 演算子のみを使用して接続されているクエリよりも優れたパフォーマンスを提供します。ドキュメントに含まれる用語の最小数を大きい値に設定すると、weakand クエリのパフォーマンスが向上します。

注: デフォルトでは、weakand クエリ機能は無効になっています。この機能を有効にするには、テクニカルサポートにお問い合わせください。

地理クエリ

構文:

query=インデックス名:'SHAPE(ARGS...)'

query 句には、次の SHAPE(ARGS...) を指定できます。

  • 点: 点は point(経度 緯度) 形式で指定できます。経度は点の経度値を指定し、緯度は点の緯度値を指定します。経度値と緯度値はスペースで区切ります。

  • 円: 円は circle(経度 緯度,半径) 形式で指定できます。経度は円の中心の経度値を指定し、緯度は円の中心の緯度値を指定し、半径は円の半径を指定します。単位: メートル。

  • 矩形: 矩形は rectangle(最小経度 最小緯度,最大経度 最大緯度) 形式で指定できます。緯度値については、最大緯度の値が最小緯度以上である必要があることに注意してください。最大緯度値が最小緯度値よりも小さい場合、システムは自動的に値を交換します。経度値については、最小経度の値が最大経度の値よりも小さい必要があります。指定された最小経度の値が指定された最大経度の値よりも大きい場合、結果は正しくありません。

  • 多角形: 多角形は polygon(経度1 緯度1,経度2 緯度2,経度3 緯度3,経度4 緯度4,...) 形式で指定できます。凸多角形または凹多角形を指定できます。多角形の始点と終点は同じ点である必要があります。隣接する辺が同一線上にある場合、または辺が交差する場合を指定することはできません。

次の点に注意してください。

  • 指定するインデックスは SPATIAL 型である必要があります。

  • 円を定義するために使用する式は、一重引用符 (') で囲む必要があります。例: query=spatial_index:'circle(130.0 10.0,1000.0)'。

  • 線と多角形の点座標は、経度 180 度を横切る場合に関係なく、平面世界地図にマッピングされて、線クエリと多角形クエリの範囲が決定されます。位置フィールドの転置インデックスのクエリ結果は正確です。線と多角形フィールドの転置インデックスのクエリ結果はフィルタリングする必要があります。

値範囲クエリ

構文:

query=インデックス名:(数値1,数値2]

数値1 は値範囲の開始を指定し、数値2 は値範囲の終了を指定します。開端点と閉端点を使用して範囲を指定できます。サンプルコードでは、数値1 の前の開き括弧 ( は数値1 が開端点であることを指定し、数値2 の隣の閉じ括弧 ] は数値2 が閉端点であることを指定します。

例:

query=price:(3,100): 3 より大きく 100 より小さい値をクエリします。

query=price:[3,100]: 3 以上 100 以下の値をクエリします。

query=price:(3,100]: 3 より大きく 100 以下の値をクエリします。

query=price:(,100): 100 より小さい値をクエリします。この句では、値範囲の開始は指定されていません。

次の点に注意してください。

  • インデックスフィールドは数値型である必要があります。

  • 指定されたフィールドの値は整数である必要があります。浮動小数点数はサポートされていません。

日付クエリ

構文:

query=インデックス名:(開始時刻,終了時刻].

開始時刻と終了時刻のタイムスタンプは INTEGER 型であり、ミリ秒単位まで正確である必要があります。開始時刻を指定しない場合、システムは値 0 からスキャンを開始します。終了時刻を指定しない場合、デフォルト値 4102416000000 が使用されます。デフォルト値は次のタイムスタンプを示します: 2100-01-01 00:00。開端点と閉端点を使用して範囲を指定できます。

次の点に注意してください。

  • インデックスフィールドは DATE 型である必要があります。

  • タイムスタンプは INTEGER 型であり、ミリ秒単位まで正確である必要があります。指定したタイムスタンプが 4102416000000 を超える場合、システムは 4102416000000 をタイムスタンプとして使用します。