【发布时间】:2019-11-21 00:30:57
【问题描述】:
在我们的索引(AWS Elasticsearch,7.1)中,我的文档具有以下简化结构:
{
"weekday" : {
"type" : "long"
},
"start_datetime" : {
"type" : "date",
"format" : "yyyy/MM/dd'T'HH:mm:ss"
},
"count" : {
"type" : "long"
}
}
为了进行分析,我想先按工作日进行聚合,然后按小时进行聚合,最后汇总最终存储桶中所有文档的计数字段。我尝试了以下方法:
"aggs": {
"WEEKDAY": {
"terms": {
"field": "weekday"
},
"aggs": {
"HOUR": {
"date_histogram": {
"field": "start_datetime",
"interval": "hour",
"format": "HH:mm:ss"
},
"aggs": {
"SUM": {
"sum": {
"field": "count"
}
}
}
}
}
}
}
Elasticsearch 返回 7 个 WEEKDAY 存储桶,如果在一周的日期时间范围内运行它(没有重复的工作日),它可以正常工作。在超过 7 天(例如一个月)的时间范围内运行时,它还会返回 7 个 WEEKDAY 存储桶,但这些存储桶不仅包含该工作日的特定文档的时间,还包含所有其他工作日的时间。有什么建议吗?
【问题讨论】:
-
您可以索引新字段,例如 "day-of-week" 、 "hour-of-day" 并将该字段用于时间轮聚合。或者您可以在此处阅读文档 @987654321 @
-
我不确定我是否理解您想要实现的目标。如果您的范围内有两个星期一,您想要一个带有两个星期一总和的存储桶,还是两个不同的存储桶?或者问题是如果超过 7 天,在星期一桶中有星期一和星期二的总和?我有点迷茫,你能提供一个有数据的例子吗?
标签: elasticsearch elasticsearch-aggregation