kav*_*avi 1 elasticsearch elasticsearch-aggregation elasticsearch-5 elasticsearch-6
我使用的是按月分组的弹性搜索版本 6.0.0,我使用的是日期直方图聚合。我试过的例子:
{
"from":0,
"size":2000,
"_source":{
"includes":[
"cost",
"date"
],
"excludes":[
],
"aggregations":{
"date_hist_agg":{
"date_histogram":{
"field":"date",
"interval":"month",
"format":"M",
"order":{
"_key":"asc"
},
"min_doc_count":1
},
"aggregations":{
"cost":{
"sum":{
"field":"cost"
}
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
结果我多次得到 1(Jan/January)。由于我有 2016 年 1 月、2017 年 1 月、2018 年 1 月的数据,因此将返回 3 次 1 月。但我只想要一月一次,其中包含一月所有年份的总和。
date_histogram您可以将terms聚合与从日期中提取月份的脚本一起使用,而不是使用聚合。
{
"from": 0,
"size": 2000,
"_source": {"includes": ["cost","date"],"excludes"[]},
"aggregations": {
"date_hist_agg": {
"terms": {
"script": "doc['date'].date.monthOfYear",
"order": {
"_key": "asc"
},
"min_doc_count": 1
},
"aggregations": {
"cost": {
"sum": {
"field": "cost"
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,使用脚本不是最佳选择,如果您知道需要月份信息,只需使用该信息创建另一个字段,这样您就可以在其上使用简单的术语聚合而无需使用脚本。