如何使用Elasticsearch的date_histogram统计指定日期范围的文档数量
Elasticsearch按天统计空日期返回0查询调整方案
你当前使用的date_histogram聚合默认仅返回有命中文档的时间桶,无数据的日期不会被返回,仅需在聚合配置中增加两个参数即可满足需求:
- 新增
min_doc_count: 0配置:强制返回所有按天拆分的时间桶,无命中文档时计数为0 - 新增
extended_bounds配置:指定返回桶的时间边界,和查询过滤的时间范围对齐,确保整个查询区间内的所有天的桶都能被返回
调整后的完整查询语句如下:
{ "size": 0, "query": { "filter": { "bool": { "must": [ { "range": { "@timestamp": { "gte": "2021-10-05T00:47:13.555Z", "lte": "2021-10-08T00:13:13.555Z", "format": "strict_date_optional_time" } } } ] } } }, "aggs": { "data": { "date_histogram": { "field": "@timestamp", "calendar_interval": "day", "min_doc_count": 0, "extended_bounds": { "gte": "2021-10-05T00:47:13.555Z", "lte": "2021-10-08T00:13:13.555Z" } // 若需按国内时区统计天维度,可额外补充时区配置 // "time_zone": "Asia/Shanghai" } } } }
调整后返回的聚合结果会包含指定时间范围内所有按天拆分的桶,无文档的日期doc_count值为0,你可以直接从返回结果中提取到2021-10-06计数2、2021-10-07计数1的预期数据。
内容的提问来源于stack exchange,提问作者abinas patra
相关产品推荐
相关产品推荐

