检查多个字段是否存在

Leo*_*ang 3 elasticsearch

Elasticsearch Query DSL允许我查找具有特定字段的文档:

GET /_search
{
    "query": {
        "exists" : { "field" : "firstname" }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Nis*_*ini 6

您可以通过将两个存在于filter子句或must子句中来做到这一点,如下所示:

{
  "query": {
    "bool": {
      "filter": [
        {
          "exists": {
            "field": "firstname"
          }
        },
        {
          "exists": {
            "field": "lastname"
          }
        }
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

使用必须:

{
  "query": {
    "bool": {
      "must": [
        {
          "exists": {
            "field": "firstname"
          }
        },
        {
          "exists": {
            "field": "lastname"
          }
        }
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • @Kourosh 是的,过滤器会更快,因为它不需要计算分数。 (3认同)