我一直试图获得“按月计算”的Elasticsearch日期直方图聚合(存储桶必须是1到31)。
例如,假设我的索引由以下内容组成:
LAST_MODIFIED_DATE
-------------------
2015-02-01 11:29
2015-03-01 11:41
2015-07-15 12:45
2015-05-15 12:47
我希望能够通过“Day in Month”聚合它,以便聚合结果集为:
Day in Month | Count
01 | 2
15 | 2
我很想得到:
Day in Month | Count
01 | 1
01 | 1
15 | 1
15 | 1
我假设每天汇总,而不是此功能所需的“日期”。
有人知道如何使用日期直方图方法实现它吗?
由于此处的应用程序需要时区支持所有日期维度,因此这似乎是最好的方法。
答案 0 :(得分:0)
你有两个解决方案
dayOfMonth
,并在该字段上汇总script
来提取月中的日期并在其上汇总(注意:你需要enable dynamic scripting)第一种解决方案是首选解决方案,因为它会更高效。
第二个解决方案如下:
{
"size": 0,
"aggs": {
"day_in_month": {
"histogram": {
"script": "doc.LAST_MODIFIED_DATE.date.getDayOfMonth()",
"interval": 1,
"order": {
"_key": "desc"
}
}
}
}
}
<强>更新强>
支持时区{
"size": 0,
"aggs": {
"day_in_month": {
"date_histogram": {
"field": "LAST_MODIFIED_DATE",
"interval": "day",
"time_zone": "+02:00",
"format": "dd",
"order": {
"_key": "desc"
}
}
}
}
}