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

OpenSearch:インデックス検索 - クエリ句

最終更新日:Jun 26, 2026

このトピックでは、インデックス検索における query 句の構文と使用方法について説明します。

概要

query 句は、すべての検索リクエストに必須です。 特定のインデックスフィールドで検索する内容を指定し、ANDORANDNOTRANK などの論理演算子を使用して、複数のクエリ条件間の関係を定義します。

例えば、titlesubject のような 2 つの TEXT 型フィールドを、default という名前の単一の複合インデックスにまとめることができます。 この default インデックスに対する検索では、検索クエリが title または subject のソースフィールドのいずれかの内容と一致するドキュメントが取得されます。

あるいは、title フィールドのみに基づいて title_search という名前のインデックスを作成した場合、title_search に対するクエリは、検索クエリが title フィールドの内容と一致するドキュメントのみを返します。

構文

クエリ条件は、次の形式で指定します

標準クエリ: index:'search query'^boost

範囲検索index:'circle(longitude latitude,radius)'

範囲検索index:[value1,value2]

  • index: インデックススキーマで定義される、検索対象のインデックスフィールドの名前です。この検索では、検索クエリがこのインデックスフィールドを構成するいずれかのソースフィールドに出現するドキュメントを検索します。

  • search query: 検索したい内容です。

  • boost: 検索クエリに適用する関連度ブーストです。 値は 0 から 99 までの整数でなければなりません。 指定しない場合のデフォルト値は 99 です。 このパラメーターはオプションであり、基本ソート式で exact_match_boost() 関数が設定されている場合にのみ有効になります。

  • 複数のクエリ条件を組み合わせるには、()ANDORANDNOTRANK の論理演算子を使用します。 これらの演算子は、大文字で記述する必要があります。 演算子は、優先順位が低いものから高いものへ、RANK < OR < AND < ANDNOT < () の順序で評価されます。

  • フレーズクエリを実行するには、検索クエリを二重引用符 ("") で囲みます。 フレーズクエリは、解析済みタームが元のフレーズと同じ順序と位置で出現するドキュメントを検索します。

  • 範囲検索は、地理的位置や数値範囲のクエリをサポートします。 詳細については、「範囲検索」をご参照ください。

使用上の注意

  • query 句は必須であり、空にすることはできません。

  • ANDNOT 演算子は単独では使用できません。 ANDNOT の左側にあるクエリ条件は、index_name:'' のように空であってはなりません。

  • index1:'xxx' RANK index2:'xxx' AND index3:'xxx' のように、RANK 演算子がクエリの末尾にない場合は、(index1:'xxx' RANK index2:'xxx') AND index3:'xxx' のように、RANK 演算を括弧でグループ化する必要があります。 そうしない場合、後続のすべての条件が RANK 演算に含まれ、クエリは index1:'xxx' RANK (index2:'xxx' AND index3:'xxx') として解釈されます。

  • 検索クエリは、一重引用符 (' ') または二重引用符 (" ") で囲む必要があります。 そうしない場合、クエリが失敗したり、結果が返されなかったり、予期しない動作が発生したりする可能性があります。

  • 複合インデックスの作成に使用できるのは、TEXT または SHORT_TEXT 型のフィールドのみです。

  • boost 値が 0 未満の場合は 0 として扱われます。 99 を超える場合は 99 として扱われます。

  • さまざまな検索タイプの処理方法の詳細については、「組み込みアナライザー」をご参照ください。

  1. title インデックスフィールドに "Peking University" が含まれるドキュメントを検索します:

    query=title:'Peking University'
  2. title インデックスフィールドに "Peking University" と "Zhejiang University" の両方が含まれるドキュメントを検索します:

    query=title:'Peking University' AND title:'Zhejiang University'
  3. title インデックスフィールドに "Peking University" または "Zhejiang University" のいずれかが含まれ、かつ type フィールドが「1」であるドキュメントを検索します:

    query=(title:'Peking University' OR title:'Zhejiang University') AND type:'1'
  4. title インデックスフィールドに "Peking University" または "Zhejiang University" のいずれかが含まれるドキュメントを検索します。 この例は、OR の代替構文を示しています

    query=title:'Peking University'|'Zhejiang University'
  5. title インデックスフィールドに Peking University は含まれるが Tsinghua は含まれないドキュメントを検索します。 titlePresident も含まれる場合は、これらのドキュメントをより上位にランク付けします:

    query=(title:'Peking University' ANDNOT title:'Tsinghua') RANK title:'President'
    // 高度ソート式は text_relevance(title) です
  6. title インデックスフィールドに Peking University という完全なフレーズが含まれるドキュメントを検索します。 これにより、"University of Beijing" のような、類似しているが別個のタームを持つドキュメントが一致するのを防ぎます:

    query=title:"Peking University"
  7. INT_ARRAY 型のフィールドを検索します:

    // arr_index_1 としてインデックス化された INT_ARRAY フィールドがあるとします。
    // このクエリは、配列に値 1 が含まれるドキュメントを取得します。
    query=arr_index_1:'1'
  8. LITERAL_ARRAY 型のフィールドを検索します: LITERAL_ARRAY は、各要素がトークン化されず、完全一致のみをサポートする文字列定数の配列です。 tags_index としてインデックス化された LITERAL_ARRAY フィールドがあるとします:

    // 配列内のいずれかの要素が 'Red' と完全に一致する場合にドキュメントが取得されます。
    // 注: LITERAL_ARRAY は完全一致を実行するため、検索クエリは配列要素と同一である必要があります。 例えば、要素が 'Peking University' の場合、'Peking' で検索しても一致は返されません。
    query=tags_index:'Red'
    
    // 配列に 'Red' または 'Blue' のいずれかが含まれるドキュメントを検索します。
    query=tags_index:'Red' OR tags_index:'Blue'