Elasticsearch:聚合 min_doc_count 数周不起作用

sul*_*tan 2 hadoop aggregate-functions elasticsearch

我有以下聚合interval=weekmin_doc_count=0

{
  "aggs": {
    "scores_by_date": {
      "date_histogram": {
      "field": "date",
      "format": "yyyy-MM-dd",
      "interval": "week",
      "min_doc_count": 0
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

和日期过滤器从Jan-01-2015Feb-23-2015

{
  "range": {
    "document.date": {
      "from": "2015-01-01",
      "to": "2015-02-23"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我预计 Elasticsearch 可以填充七周,即使是空的并返回存储桶,但最终只包含一项

{
  "aggregations": {
    "scores_by_date": {
      "buckets": [
        {
          "key_as_string": "2015-01-05",
          "key": 1420416000000,
          "doc_count": 5
        }
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

Elasticsearch version: 1.4.0

我的聚合有什么问题,或者我怎么能说 Elasticsearch 来填补缺失的几周?

rch*_*ang 7

您可以尝试指定扩展边界(直方图聚合的官方文档页面上有讨论此功能的文档)。这些文档中最相关的金块是:

使用extended_bounds 设置,您现在可以“强制”直方图聚合以开始在特定最小值上构建存储桶,并继续构建高达最大值的存储桶(即使不再有文档)。仅当 min_doc_count 为 0 时使用 extended_bounds 才有意义(如果 min_doc_count 大于 0,则永远不会返回空桶)。

因此,您的聚合可能必须看起来像这样才能强制 ES 返回该范围内的空桶:

{
  "aggs": {
    "scores_by_date": {
      "date_histogram": {
      "field": "date",
      "format": "yyyy-MM-dd",
      "interval": "week",
      "min_doc_count": 0,
      "extended_bounds" : {
        "min" : "2015-01-01",
        "max" : "2015-02-23"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)