クエリ句
クエリ句は、クエリステートメントの最も基本的で不可欠な部分です。 クエリ句は、特定のインデックスフィールドに基づいてクエリ対象のコンテンツを定義します。 AND、OR、ANDNOT、RANK などの論理演算子を使用して、複数のクエリ条件を指定し、それらの関係を定義できます。
たとえば、テーブルに TEXT タイプの title フィールドと subject フィールドが含まれているとします。 これらのフィールドに基づいて、default という名前の複合インデックスを作成できます。 ステートメントのクエリ句では、default インデックスと、title フィールドまたは subject フィールドの用語で構成される検索クエリを指定して、検索クエリに一致するドキュメントをクエリできます。
また、title フィールドに基づいて title_search という名前のインデックスを作成することもできます。 title_search インデックスに基づいてクエリを実行すると、システムは title フィールドの値が指定した検索クエリに一致するドキュメントのみを返します。
構文
{
"query": ""
}クエリ句は、クエリステートメントの必須部分です。 クエリ句の内容は、クエリを実行する基になるインデックスと検索クエリで構成される文字列です。 例: title:'OpenSearch' AND tag:'1'。 クエリ構文の詳細については、このトピックの[単純なクエリ]セクションと[高度なクエリ]セクションを参照してください。
単純なクエリ
構文:
インデックス名:'検索クエリ'^ブースト 論理演算子 インデックス名:'検索クエリ'^ブーストインデックス名: クエリを実行する基になるインデックス。 指定されたインデックスは、作成するインデックススキーマに含まれている必要があります。 システムは、指定されたインデックスの作成基になったフィールドの値をスキャンし、フィールドの値が指定した検索クエリに一致するドキュメントを返します。
検索クエリ: 検索するコンテンツ。
boost: 検索クエリに指定する重み。 このパラメータの値は INT タイプである必要があります。 有効な値: [0,99]。 boost パラメータを指定しない場合、デフォルトの boost 値は 99 です。
複数の演算子を使用して、クエリ条件間の論理関係を定義できます。 次の演算子がサポートされています:
()、AND、OR、ANDNOT、RANK。 演算子は大文字で指定する必要があります。 これらの演算子の優先順位は、RANK < OR < AND < ANDNOT < () の順です。2 つのクエリ条件の間に AND 演算子を指定すると、システムは両方のクエリ条件に一致するドキュメントのみを返します。 たとえば、query=default:'携帯電話' AND default:'Bluetooth' 句を使用して、携帯電話と Bluetooth を含むドキュメントをクエリできます。
2 つのクエリ条件の間に OR 演算子を指定すると、システムは一方のクエリ条件に一致するドキュメントを返します。 たとえば、query=default:'携帯電話' OR default:'Bluetooth' 句を使用して、携帯電話または Bluetooth を含むドキュメントをクエリできます。
2 つのクエリ条件の間に ANDNOT 演算子を指定すると、システムは左の条件のみに一致するドキュメントを返します。 たとえば、query=default:'携帯電話' ANDNOT default:'Bluetooth' 句を使用して、携帯電話を含み、Bluetooth を含まないドキュメントをクエリできます。
2 つのクエリ条件の間に RANK 演算子を指定すると、システムは左の条件に一致し、右の条件に一致しない可能性のあるドキュメントを返します。 たとえば、query=default:'携帯電話' RANK default:'Bluetooth' 句を使用して、携帯電話を含み、Bluetooth を含まない可能性のあるドキュメントをクエリできます。 特定の検索クエリが関連性スコアを計算するために必要であり、これらの検索クエリがクエリ結果に影響しない場合に、この演算子を使用できます。 前の例では、default:'Bluetooth' 条件は、ドキュメント内のテキストに基づいて関連性スコアを計算するために使用されます。 この場合、Bluetooth を含むドキュメントには高いランクが割り当てられます。
高度なクエリ
複数の検索クエリが同じインデックスに基づくクエリ
構文:
インデックス名:'検索クエリ'^ブースト | '検索クエリ'^ブースト
インデックス名:'検索クエリ'^ブースト & '検索クエリ'^ブースト縦棒 (|) は OR 演算子を指定します。 アンパサンド (&) は AND 演算子を指定します。
フレーズクエリ
構文:
インデックス名:"検索クエリ"^ブースト 論理演算子 インデックス名:"検索クエリ"^ブーストフレーズクエリステートメントを作成するときは、各検索クエリを二重引用符 (
") で囲みます。 フレーズクエリでは、すべての用語が接続され、分析の前後で同じ順序で配置されます。範囲クエリには、地理クエリと値範囲クエリが含まれます。 詳細については、以下のセクションを参照してください。
クエリ句を生成するときは、フレーズクエリ内の二重引用符をエスケープします。
地理クエリ
構文:
インデックス名:'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 度を交差する場合に関係なく、平面世界地図にマッピングされて、線クエリと多角形クエリの範囲が決定されます。 位置フィールドの転置インデックスのクエリ結果は正確です。 線と多角形フィールドの転置インデックスのクエリ結果はフィルタリングする必要があります。
値範囲クエリ
構文:
インデックス名:(数値 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 より小さい値をクエリします。 この句では、値範囲の開始は指定されていません。
次の情報に注意してください。
インデックスフィールドは数値型である必要があります。
指定されたフィールドの値は整数である必要があります。 浮動小数点数はサポートされていません。
日付クエリ
構文:
インデックス名:(開始時刻,終了時刻]開始時刻と終了時刻のタイムスタンプは INTEGER タイプで、ミリ秒単位まで正確である必要があります。 開始時刻を指定しない場合、システムは値 0 からスキャンを開始します。 終了時刻を指定しない場合、デフォルト値は 4102416000000 で、2100-01-01 00:00 を示します。 開区間端点と閉区間端点を使用して範囲を指定できます。
次の情報に注意してください。
インデックスフィールドは DATE タイプである必要があります。
タイムスタンプは INTEGER タイプで、ミリ秒単位まで正確である必要があります。 指定したタイムスタンプが 4102416000000 を超える場合、システムはタイムスタンプとして 4102416000000 を使用します。
例
テキストベースのクエリ
タイトルに北京大学が含まれるドキュメントをクエリします。
query=title: '北京大学'タイトルに北京大学と浙江大学が含まれるドキュメントをクエリします。
query=title: '北京大学' AND title: '浙江大学'タイトルに北京大学または浙江大学が含まれるドキュメントをクエリします。
query=title: '北京大学' OR title: '浙江大学'2024 年 10 月に発売された製品をクエリします。
query=publish_time:(1727712000000,1730304000000)
ベクトルベースのクエリ
64 次元ベクトルインデックスをクエリします。
構文: query=vector:'ベクトルデータ' query=vector: '0.377796,-0.958450,0.409853,-0.238177,-1.293826,0.356797,-0.295727,0.847301,-1.220337,0.148032,-1.128458,0.903187,0.509352,0.293686,-1.005852,-0.488839,0.888227,-0.555556,-0.658025,0.267552,-0.567601,0.003045,0.591734,-0.515983,-1.316453,-1.462450,0.091946,1.554954,0.384802,0.720498,0.144338,1.217826,0.724039,0.044212,0.571332,-1.425430,0.618965,0.481887,-1.617787,1.505416,-0.683652,1.030900,0.562021,0.162437,0.816546,0.112229,-0.739288,-0.342643,-0.199292,0.508368,-1.384887,-1.842170,0.952622,-1.699499,0.199430,-0.232464,-0.273227,-0.383696,-0.511302,0.005458,1.873572,-0.926169,-0.417587,-0.660156'上位 N 個のベクトルをクエリします。
構文: &n=ベクトルの後に配置された数値 query=vector_index:'0.1,0.2,0.98,0.6;0.3,0.4,0.98,0.6&n=10'
テキストとベクトルに基づくハイブリッドクエリ
タイトルに北京大学が含まれる 64 次元ベクトルデータをクエリします。
構文: query=vector:'ベクトルデータ' AND title:'キーワード'
query=title:'北京大学' AND vector: '0.377796,-0.958450,0.409853,-0.238177,-1.293826,0.356797,-0.295727,0.847301,-1.220337,0.148032,-1.128458,0.903187,0.509352,0.293686,-1.005852,-0.488839,0.888227,-0.555556,-0.658025,0.267552,-0.567601,0.003045,0.591734,-0.515983,-1.316453,-1.462450,0.091946,1.554954,0.384802,0.720498,0.144338,1.217826,0.724039,0.044212,0.571332,-1.425430,0.618965,0.481887,-1.617787,1.505416,-0.683652,1.030900,0.562021,0.162437,0.816546,0.112229,-0.739288,-0.342643,-0.199292,0.508368,-1.384887,-1.842170,0.952622,-1.699499,0.199430,-0.232464,-0.273227,-0.383696,-0.511302,0.005458,1.873572,-0.926169,-0.417587,-0.660156'