我正在尝试进行date_histogram汇总以显示每个小时的持续时间总和。
我有以下文件:
{
"EntryTimestamp": 1567029600000,
"Username": "johndoe",
"UpdateTimestamp": 1567029600000,
"Duration": 10,
"EntryID": "ASDF1234"
}
以下内容非常有效,但是我的问题是,有时会有多个文档使用相同的EntryID出现。因此,理想情况下,我需要以某种方式添加top_hits,并按UpdateTimestamp进行排序,因为我需要为每个唯一的EntryID提供最新的更新文档。但不确定如何将其添加到我的查询中。
{
"size": 0,
"query": {
"bool": {
"filter": [{
"range": {
"EntryTimestamp": {
"gte": "1567029600000",
"lte": "1567065599999",
"format": "epoch_millis"
}
}
}, {
"query_string": {
"analyze_wildcard": true,
"query": "Username.keyword=johndoe"
}
}
]
}
},
"aggs": {
"2": {
"date_histogram": {
"interval": "1h",
"field": "EntryTimestamp",
"min_doc_count": 0,
"extended_bounds": {
"min": "1567029600000",
"max": "1567065599999"
},
"format": "epoch_millis"
},
"aggs": {
"1": {
"sum": {
"field": "Duration"
}
}
}
}
}
}
答案 0 :(得分:0)
我认为您需要在术语聚合中添加top_hits聚合。
术语聚合将获取不同的EntryID,并且其中最热门的聚合将仅获取术语聚合的每个存储桶(每个不同的值)的最新文档(基于UpdateTimestamp)。
我没有适合您上下文的明确语法,并且我相信您可能会遇到有关子聚合数量的问题(我过去在高级聚合方面遇到了一些限制)
您可以查看this帖子以获取有关此信息的更多信息;我希望对您有帮助。