Elasticsearch - 查找缺少两个字段的文档

Elasticsearch - Find documents missing two fields

我正在尝试创建一个查询,其中 return 的信息是关于有多少文档没有两个字段(date.new 和 date.old)的数据。我尝试了下面的查询,但它作为 OR 逻辑工作,其中缺少 date.new 或 date.old 的所有文档都被 returned。有谁知道我如何才能使 return 文档缺少这两个字段?

{
   "aggs":{
      "Missing_field_count1":{
         "missing":{
            "field":"date.new"
         }
      },
      "Missing_field_count2":{
         "missing":{
            "field":"date.old"
         }
      }
   }
}

聚合不是为此使用的功能。您需要使用 exists query wrapped within a bool/must_not 查询,如下所示:

GET index/_count
{
  "size": 0,
  "bool": {
    "must_not": [
      {
        "exists": {
          "field": "date.new"
        }
      },
      {
        "exists": {
          "field": "date.old"
        }
      }
    ]
  }
}

hits.total.value表示匹配搜索请求的文档数。该值表示匹配的命中数,关系表示该值是准确的 (eq) 还是下限 (gte)

索引数据:

{
  "data": {
    "new": 1501,
    "old": 10
  }
}

{
  "title": "elasticsearch"
}

{
  "title": "elasticsearch-query"
}
{
  "date": {
    "new": 1400
  }
}

@Val 给出的搜索查询回答了如何实现您的用例。

搜索结果:

"hits": {
    "total": {
      "value": 2,                <-- note this
      "relation": "eq"
    },
    "max_score": 0.0,
    "hits": [
      {
        "_index": "65112793",
        "_type": "_doc",
        "_id": "2",
        "_score": 0.0,
        "_source": {
          "title": "elasticsearch"
        }
      },
      {
        "_index": "65112793",
        "_type": "_doc",
        "_id": "5",
        "_score": 0.0,
        "_source": {
          "title": "elasticsearch-query"
        }
      }
    ]
  }