如何在ES5.0上实现存在过滤器?

时间:2016-12-11 10:25:02

标签: elasticsearch

已存在的过滤器已被ES5.0中的存在查询替换。

那么我们怎样才能在同一个查询中实现等价?换句话说,我们不想进行两次查询,只是针对各种聚合,包括存在计数?

所以我想计算字段的时间" the_field"存在(或不为空)

"aggregation":{
   "exists_count":{
      "filter":{
         "exists":{
           "field":"the_field"
         }
      }
   }
}

2 个答案:

答案 0 :(得分:0)

我认为你可以使用统计数据聚合,

{ "aggs" : 
       { "time_stats" :               
          { "extended_stats" : 
             { "field" : "time" }
          } 
        } 
}

查看elastic stats doc

答案 1 :(得分:0)

使用Elastic 5.0,过滤器并没有被查询取代,而是组合在一起。从语法上看它们看起来是一样的,但是你使用它的上下文决定了它是被解释为一个查询(因子得分)还是一个过滤器来简单地清除文档。以下代码应该完全符合您的要求:

{
  "query": {
    "match_all": {}
  },
  "aggs": {
    "field_exists": {
      "filter": {
        "exists": {
          "field": "name"
        }
      }
    }
  }
}

返回的聚合看起来像这样,doc_count表示“名称字段存在的文档数量。希望这有帮助!

{
  "aggregations": {
    "field_exists": {
      "doc_count": 11984
    }
  }
}