Queries と Filters
Elasticsearch で検索を実行する方法として、Queries(クエリ)と Filters(フィルター)の2種類が用意されています。
最新版では、クエリとフィルタがマージされました。任意のクエリ句は現在、「クエリーコンテキスト」でクエリとして、フィルターコンテキスト」でフィルタとして使用することができます
Query DSL
Elasticsearchは、クエリを定義するJSONに基づいて、完全なクエリDSLを提供する
Leaf query clauses
- match
- term
-
range
- 特定のフィールドに特定の値を検索できる
- 単独で使用することができる
Compound query clauses
複合クエリ
Query context
- クエリは全文検索用に利用する。
- 関連性のスコアに依存する結果を得たい時に利用する。
Filter context
- フィルターはキャッシュされ、たいしてメモリも使わない。
- 他のクエリが同じフィルターを利用する場合は爆速である。
- term, terms, prefix, range などのフィルターはデフォルトでキャッシュされ、同じフィルターが複数の異なるクエリで利用されるようなケースで推奨される。”age higher than 10″ のような range フィルターのケースなど。
- 他の geo, scripts などのフィルターはフィールド値とともにメモリーにロードされ、デフォルトではキャッシュされない。これらのフィルターは元々速いし、キャッシュするのに単に実行するより余計な処理が必要なため。
- 残りの and, not, or などのフィルターは他のフィルターを操作するので、基本的にキャッシュされない。
- 全てのフィルターは _cache 要素と _cache_key 要素を指定して明示的にキャッシュを操作できる。大きなフィルター作成時などに便利