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" } }
      ]
    }
  }
}