如何在ElasticSearch中实现类似PostgreSQL generate_series的日期序列生成功能
ElasticSearch原生完全支持该需求,不需要自行补全缺失日期,你当前查询没有返回无销量日期的核心原因是缺少extended_bounds参数配置。
date_histogram的min_doc_count: 0仅能保证在你的数据实际覆盖的时间区间内,无数据的日期返回销量为0;但对于数据范围外、你查询指定的过滤区间的头尾部分,默认不会生成空桶,需要用extended_bounds强制指定统计的起止边界,作用和PostgreSQL中的generate_series完全一致。
修改后的完整查询语句如下:
{ "query": { "range": { "date": { "from": "2020-03-01T00:00:00+0300", "to": "2021-10-01T00:00:00+0300", "include_lower": true, "include_upper": true, "boost": 1.0 } } }, "aggs" : { "sales_over_time" : { "date_histogram" : { "field" : "date", "interval" : "day", "min_doc_count": 0, "extended_bounds": { "min": "2020-03-01T00:00:00+0300", "max": "2021-10-01T00:00:00+0300" } } } } }
补充说明:ElasticSearch 7.2及以上版本中,interval参数已被废弃,推荐替换为"calendar_interval": "day",语义更明确,也符合官方后续的兼容规范。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

