Elasticsearch:在列表中搜索字段null OR

时间:2017-07-13 09:00:40

标签: search elasticsearch elasticsearch-5 nosql

我想在ElasticSearch中写这样的东西:

SELECT * 
FROM ...
WHERE name IS NULL OR name IN ("a","b","c");

我可以写" IS NULL"部分使用:

{
    "query" :
    {
      "bool" : {
      "must_not": {
        "exists": {
          "field": "name"
        }
      }
    }
  }     
}

" IN列表"部分:

{
    "query" :
    {
      "bool" : {
          "should" : [
            {
              "terms" : {
                "name" : [
                  "a", "b", "c"
                ]
              }
            }
          ]
      }
   }    
}

但是我找不到使用OR合并这两个查询的方法(当然不是AND)。

由于

1 个答案:

答案 0 :(得分:0)

您可以使用bool/should来结合两者

{
  "query": {
    "bool": {
      "should": [
        {
          "terms": {
            "name": [
              "a",
              "b",
              "c"
            ]
          }
        },
        {
          "bool": {
            "must_not": {
              "exists": {
                "field": "name"
              }
            }
          }
        }
      ]
    }
  }
}