检查多个字段是否存在

时间:2019-04-04 23:53:01

标签: elasticsearch

The Elasticsearch Query DSL使我可以查找存在某些字段的文档:

GET /_search
{
    "query": {
        "exists" : { "field" : "firstname" }
    }
}

但是似乎只有一个字段存在,如何检查2个字段是否存在?例如,我想查找同时具有firstnamelastname字段的用户。

2 个答案:

答案 0 :(得分:1)

要创建具有多个条件的查询,应在elasticsearch中使用bool子句。请阅读here

尝试:

GET /_search
{
  "query" : {
    "bool" : {
      "must": [{
        "exists" : { "field" : "firstname" },
        "exists" : { "field" : "lastname" }
    }]
  }
 }
}

答案 1 :(得分:1)

您可以通过将filter子句或must子句中存在的两个包裹起来,如下所示:

{
  "query": {
    "bool": {
      "filter": [
        {
          "exists": {
            "field": "firstname"
          }
        },
        {
          "exists": {
            "field": "lastname"
          }
        }
      ]
    }
  }
}

filter子句中使用将提供与must子句相同的输出。唯一的区别是带过滤器的那个不会计算分数,而带过滤器的那个不会计算分数。根据您的需要使用。有关更多信息,请阅读this

必须使用

{
  "query": {
    "bool": {
      "must": [
        {
          "exists": {
            "field": "firstname"
          }
        },
        {
          "exists": {
            "field": "lastname"
          }
        }
      ]
    }
  }
}