Elasticsearch查询问题:无法获取上一小时文档计数
问题原因
你的查询中,bool.must 里的 range 条件已经把结果集过滤成了 timestamp ≥ 2023-06-26 20:44:56 的文档,而聚合统计的是 19:44:56 到 20:44:56 的文档,这部分文档已经被前置过滤掉了,所以聚合结果为 0。
解决方案
将用于筛选结果集的 timestamp 范围条件从 bool.must 移到 post_filter 中。post_filter 会在聚合完成后再对返回的文档进行过滤,这样聚合就能统计到符合时间范围的所有文档,同时最终返回的 hits 还是 timestamp 大于指定时间的记录。
修正后的查询代码:
{ "query": { "bool": { // 保留其他必要的查询条件(如果有的话) } }, "sort": [ { "timestamp": { "order": "asc" } } ], "aggs": { "last_hour_count": { "range": { "field": "timestamp", "ranges": [ { "from": "2023-06-26 19:44:56", "to": "2023-06-26 20:44:56" } ] } } }, "post_filter": { "range": { "timestamp": { "gte": "2023-06-26 20:44:56" } } } }
如果原本的 bool.must 还有其他查询条件,直接保留在里面即可,仅将 timestamp 的过滤条件移至 post_filter。
内容的提问来源于stack exchange,提问作者Srujan Gundeti
相关产品推荐
相关产品推荐

