即使没有数据,在固定日期范围内(即固定数量的存储桶)的直方图

时间:2019-03-01 10:23:54

标签: elasticsearch

我的目标是在开始日期和结束日期之间建立直方图,空日期应显示在直方图中,并且计数值为零。

我正在尝试以下查询以获取最近7天:

POST my_index/_search
{
  "size": 0,
  "query": {
    "range": {
      "date": {
        "gte": "now-7d/d",
        "lte": "now/d"
        }
      }
  },
  "aggs" : {
      "count_per_day" : {
          "date_histogram" : {
              "field" : "date",
              "interval" : "day",
              "order": {"_key": "desc"},
              "min_doc_count": 0
          }
      }
  }
}

问题在于我只有最近3天的数据,因此3天之前没有任何数据。在这种情况下,结果仅包含最近3天,而前几天完全不返回。

但是,如果存在差距(即6天前有数据,但第5天和第4天没有数据),则空天将以零计数。

即使没有数据,我如何强制返回缺席日期? 换句话说,即使没有数据,如何确定存储桶的数量(在上面的示例中为7)?

1 个答案:

答案 0 :(得分:1)

您已经添加了"min_doc_count": 0以包括空桶。您需要做的就是简单地添加extended_bounds参数,以强制开始和结束存储桶。有关更多信息,请参见here

如下更新查询:

{
  "size": 0,
  "query": {
    "range": {
      "date": {
        "gte": "now-7d/d",
        "lte": "now/d"
      }
    }
  },
  "aggs": {
    "count_per_day": {
      "date_histogram": {
        "field": "date",
        "interval": "day",
        "order": {
          "_key": "desc"
        },
        "min_doc_count": 0,
        "extended_bounds": {
          "min": "now-7d/d",
          "max": "now/d"
        }
      }
    }
  }
}