概要
クエリ句は、検索クエリに不可欠な部分です。クエリ句は、特定のインデックスフィールドに基づいてクエリ対象のコンテンツを定義します。AND、OR、ANDNOT、RANK などの論理演算子を使用して、複数のクエリ条件を指定し、それらの関係を定義できます。
たとえば、TEXT
タイプの title
フィールドと subject
フィールドを組み合わせて、複合インデックスフィールド default
を作成できます。その後、インデックスフィールド default
に基づいて検索を実行し、title
フィールドまたは subject
フィールドに検索クエリが含まれるドキュメントを取得できます。
title
フィールドのみを使用して、インデックスフィールド title_search
を作成することもできます。その後、インデックスフィールド title_search
に基づいて検索を実行すると、title
フィールドに検索クエリが含まれるドキュメントのみを取得できます。
説明
クエリ条件は、次の形式で使用できます。
標準クエリ: index: '検索クエリ'^boost
範囲検索: index:'circle (
経度 緯度
,半径)'
範囲検索: index:[数値 1,数値 2]
index: インデックススキーマを定義するときに構成されるインデックス情報。インデックスフィールドは、指定されたインデックスフィールドのソースフィールドに検索クエリが含まれるドキュメントを検索するために使用されます。
検索クエリ: 検索するコンテンツ。
boost: 検索クエリに指定する重み。このパラメータの値は INT 型である必要があります。有効な値: [0,99]。boost パラメータを指定しない場合、デフォルトの boost 値は 99 です。このパラメータはオプションであり、粗ソート式で
exact_match_boost()
関数を構成した場合にのみ有効になります。複数のクエリ条件を指定し、次の論理演算子を使用してクエリ条件を関連付けることができます:
()
、AND
、OR
、ANDNOT
、RANK
。これらの演算子はすべて大文字にする必要があります。これらの演算子は、次の優先順位でランク付けされます:RANK
<OR
<AND
<ANDNOT
<()
。二重引用符 (
""
) で囲まれた検索クエリは、フレーズクエリです。フレーズクエリでは、すべての用語が接続され、分析の前後で同じ順序で配置されます。範囲検索は、地理位置分析と数値分析に使用されます。詳細については、範囲検索 を参照してください。
使用上の注意
クエリ句は必須であり、空にすることはできません。
ANDNOT 演算子は単独で使用することはできず、ANDNOT 演算子の左側の条件は null にすることはできません (例: index_name:”)。
RANK 条件がクエリの末尾にない場合 (例:
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' はindex1:'xxx' RANK (index2:'xxx' AND index3:'xxx')
と同じです。検索クエリは、一重引用符 (') または二重引用符 (") で囲む必要があります。そうしないと、クエリエラーが返されるか、予期しないクエリ結果が返されます。
TEXT
タイプとSHORT_TEXT
タイプのフィールドのみを組み合わせて、複合インデックスを作成できます。boost 値が 0 未満の場合、0 が使用されます。boost 値が 99 を超える場合、99 が使用されます。
さまざまな検索の意味の詳細については、組み込みアナライザー を参照してください。
例
タイトルに北京大学が含まれるドキュメントを検索します。
query=title: 'Peking University'
タイトルに北京大学と浙江大学が含まれるドキュメントを検索します。
query=title: 'Peking University' AND title: 'Zhejiang University'
タイトルに北京大学または浙江大学が含まれ、type パラメータが 1 に設定されているドキュメントを検索します。
query=(title: 'Peking University' OR title: 'Zhejiang University') AND type:'1'
タイトルに北京大学または浙江大学が含まれるドキュメントを検索します。この例では、OR 構文が別の形式で示されています。
query=title: 'Peking University'|'Zhejiang University'
タイトルに北京大学が含まれ、清華大学が含まれないドキュメントを検索します。タイトルに校長が含まれるドキュメントが上位にランク付けされます。
query=(title:'Peking University' ANDNOT title:'Tsinghua') RANK title: 'Principal' // 詳細ソート式: text_relevance(title)
タイトルに北京大学が含まれるドキュメントを検索します。北京大学は複数の用語に分割できず、「北京の大学」などの類似の用語を含むドキュメントは返されません。
query=title: 'Peking University'
ARRAY タイプのインデックスフィールドに基づいて検索を実行します。
// INT ARR タイプのフィールドがインデックス arr_index_1 として使用されます // インデックス arr_index_1 の値が 1 であるドキュメントを取得します。 query=arr_index_1:'1'