在我们的索引(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个工作日存储桶,如果在一周的日期时间范围内运行它(没有重复的工作日),则运行得很好。当在超过7天(例如一个月)的时间范围内运行时,它还返回7个工作日存储桶,但这些存储桶不仅包含此工作日的特定文档的小时数,还包含所有其他工作日的小时数。有什么建议吗?
发布于 2019-11-21 00:30:58
我通过使用无痛脚本解决了这个问题。如果有人需要他/她的项目的解决方案:
"aggs": {
"WEEKDAY": {
"terms": {
"field": "weekday",
"order" : { "_key" : "asc" }
},
"aggs": {
"HOUR": {
"histogram": {
"script": "doc['start_datetime'].value.getHourOfDay()",
"interval": 1,
"min_doc_count": 0,
"extended_bounds": {
"min": 0,
"max": 23
},
"order": {
"_key": "asc"
}
},
"aggs": {
"SUM": {
"sum": {
"field": "count"
}
}
}
}
}
}
}https://stackoverflow.com/questions/58934256
复制相似问题