クエリ DSL
Elasticsearch は、クエリを定義するために JSON に基づいた完全なクエリ DSL (ドメイン固有言語) を提供します。クエリ DSL をクエリの AST (抽象構文木) と考えてください。これは、2 種類の句から構成されています:
- リーフクエリ句
- リーフクエリ句は、特定のフィールド内の特定の値を探します。例えば、
match
、term
、またはrange
クエリなどです。これらのクエリは単独で使用できます。 - 複合クエリ句
- 複合クエリ句は、他のリーフ または 複合クエリをラップし、複数のクエリを論理的に結合するために使用されます(
bool
またはdis_max
クエリのように)、またはその動作を変更するために使用されます(constant_score
クエリのように)。
クエリ句は、クエリコンテキストまたはフィルターコンテキスト で使用されるかどうかによって異なる動作をします。
- 高コストのクエリを許可する
- 特定のタイプのクエリは、実装方法のために一般的に遅く実行され、クラスターの安定性に影響を与える可能性があります。これらのクエリは次のように分類できます:
- 一致を特定するために線形スキャンを行う必要があるクエリ:
script
クエリ- インデックスされていないが doc values が有効な numeric、date、boolean、ip、geo_point、または keyword フィールドに対するクエリ
- 高い初期コストを持つクエリ:
fuzzy
クエリ (wildcard
フィールドを除く)regexp
クエリ (wildcard
フィールドを除く)prefix
クエリ (wildcard
フィールドまたはindex_prefixes
がないフィールドを除く)wildcard
クエリ (wildcard
フィールドを除く)range
クエリtext
およびkeyword
フィールドに対して
- 結合クエリ
- ドキュメントごとに高コストの可能性があるクエリ:
- 一致を特定するために線形スキャンを行う必要があるクエリ:
このようなクエリの実行は、search.allow_expensive_queries
設定の値を false
に設定することで防ぐことができます(デフォルトは true
です)。