10.ES|Bool Query
概要
Elasticsearch 2.0からANDクエリとORクエリが非推奨となり、代わりにBoolクエリが推奨となった。
Boolクエリは複数クエリの組合せ(AND・OR・NOTの結合)に使う。
- 「must」…ANDとして使う。小クエリは総合スコアに影響を与える。
- 「filter」…mustと同じくAND。ただし、スコアは無視される(総合スコアに影響を与えない)。
- 「should」…ORとして使う。minimun_should_matchパラメータで最低マッチする条項の数が指定できる。
- 「must_not」…NOTのこと。
※スコア:Elasticsearchではscoreが高い順に検索結果が並び変わる。 www.elastic.co
クエリサンプル
- 「must」:usersインデックスから「name:デモユーザー」を含む、かつ「email:test」を含む対象すべてを取得。
GET users/_search { "query": { "bool": { "must": [ { "match": { "name": "デモユーザー" } }, { "match": { "email": "test" } } ] } } }
- 「should」:usersインデックスから「name:デモユーザー」を含む、または「email:test」を含む対象すべてを取得。
GET users/_search { "query": { "bool": { "should": [ { "match": { "name": "デモユーザー" } }, { "match": { "email": "test" } } ] } } }
- 「must_not」:usersインデックスから「name:デモユーザー」ないし「email:test」のどちらも含まない対象すべてを取得。
GET users/_search { "query": { "bool": { "must_not": [ { "match": { "name": "デモユーザー" } }, { "match": { "email": "test" } } ] } } }
- Elasticsearch公式/「検索の実行」参照 www.elastic.co