使用聚合查找最新批次中的文件数
Posted
技术标签:
【中文标题】使用聚合查找最新批次中的文件数【英文标题】:Finding number of files in latest batch using aggregations 【发布时间】:2021-12-03 19:34:16 【问题描述】:我在 Elasticsearch 论坛上问过这个same question,但还没有得到答案。
这是场景:
我有一个索引,其中包含表示上传到文件存储的文件的文档。这些文档是分批上传的,每个文档都标记有一个 batch_id 字段以及它们的上传时间。它们还有一个状态字段,用于跟踪文件在摄取期间是否通过/失败。
一些示例文档:
"batch_id" : "a",
"file_name" : "file_1_from_batch_a",
"@timestamp" : "2021-10-12T18:12:54.331Z",
"status" : "success"
"batch_id" : "a",
"file_name" : "file_2_from_batch_a",
"@timestamp" : "2021-10-12T00:00:00.000Z",
"status" : "success"
"batch_id" : "b",
"file_name" : "file_1_from_batch_b",
"@timestamp" : "2021-10-13T18:13:00.000Z",
"status" : "failure"
"batch_id" : "b",
"file_name" : "file_2_from_batch_b",
"@timestamp" : "2021-10-13T18:10:22.450Z",
"status" : "failure"
我希望对索引执行聚合查询,以了解最新一批文件中发生了多少失败。
到目前为止,这是我想出的,但遗憾的是它没有给出正确的答案
GET my-index/_search
"size": 0,
"aggs":
"most_recent" :
"terms":
"field" : "@timestamp",
"order": "_term": "desc" ,
"size": 1
,
"aggs":
"execution_id":
"terms":
"field": "batch_id.keyword"
,
"aggs":
"failures":
"filter": "term": "status.keyword": "failure"
回复:
"took" : 1,
"timed_out" : false,
"_shards" :
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
,
"hits" :
"total" :
"value" : 4,
"relation" : "eq"
,
"max_score" : null,
"hits" : [ ]
,
"aggregations" :
"most_recent" :
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 3,
"buckets" : [
"key" : 1634148780000,
"key_as_string" : "2021-10-13T18:13:00.000Z",
"doc_count" : 1,
"execution_id" :
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
"key" : "b",
"doc_count" : 1,
"failures" :
"doc_count" : 1
]
]
查询为我提供了最新批次的 batch_id(这很好),但错误地告诉我该批次中有多少文件失败(应该是 2)。
我将不胜感激!
【问题讨论】:
【参考方案1】:您正在聚合时间戳,除非 2 个批次具有完全相同的时间戳,否则始终会产生 doc_count
和 1
。
由于它是在唯一时间戳上聚合批次,因此您实际上并没有根据 batch_id
将它们分组为批次。first。
为了证明这一点,将您的 terms
查询更改为不包含 size
参数,您将看到搜索结果将包括 2 个 a
s 和 2 个 b
s 按时间戳“分组” .
"terms":
"field" : "@timestamp",
"order": "_term": "desc"
这就是它的原因,但我目前无法测试什么是工作版本,所以把它留在这里作为草稿。
【讨论】:
以上是关于使用聚合查找最新批次中的文件数的主要内容,如果未能解决你的问题,请参考以下文章