Elasticsearch聚合查询统计最新批次文件失败数问题求助
问题原因
你当前查询的逻辑存在顺序错误:先按@timestamp分组取最新的单个时间戳对应的文档桶,这一步只会命中最新上传的那1个文件(batch_b的file_1),同批次另一个上传时间稍早的文件被直接过滤掉,自然统计不到全量的失败数。
正确实现思路
应该先按批次分组,计算每个批次的最晚上传时间,取最晚时间对应的批次(即最新上传批次),再统计该批次下的所有失败文件数,对应DSL如下:
GET my-index/_search { "size": 0, "aggs": { "batch_group": { "terms": { "field": "batch_id.keyword", "order": { "batch_max_time": "desc" }, "size": 1 }, "aggs": { "batch_max_time": { "max": { "field": "@timestamp" } }, "failure_count": { "filter": { "term": { "status.keyword": "failure" } } } } } } }
结果说明
返回的聚合结果中,batch_group桶下的failure_count.doc_count就是最新批次的失败文件总数,按你给出的示例数据会返回2,符合预期。
内容的提问来源于stack exchange,提问作者Tim Estes
相关产品推荐
相关产品推荐

