假设我在文档上有一个日期字段,我知道使用date_histogram聚合可以按天,月,年等获得文档计数。
我想要做的是获取给定年份中一月,二月,三月等的平均文档数。在给定的几周内,星期一,星期二,星期三等也是如此。是否有一种方法可以使日期字段具有相同的值,或者用Elasticsearch做到这一点的最佳方法是什么?
例
假设我们有三年多的订单:
我想要的是给定年份中每个月的平均值,因此输出将是:
1月(10 + 13 + 10/3 = 11个订单),2月(6.33个订单),3月(8.33个订单),4月(13个订单)等
最好将其推广N年(或N 1月等),以便我们搜索任何日期范围。
您可以像这样使用“monthOfYear”:
"aggregations": {
"timeslice": {
"histogram": {
"script": "doc['timestamp'].date.getMonthOfYear()",
"interval": 1,
"min_doc_count": 0,
"extended_bounds": {
"min": 1,
"max": 12
},
"order": {
"_key": "desc"
}
}
}
Run Code Online (Sandbox Code Playgroud)
扩展的界限将确保您获得每个月的值(即使它为零)。
如果您想要月份名称,您可以在自己的代码中执行此操作,或者执行此操作(结果是您不会获得没有数据的月份的值):
"aggregations": {
"monthOfYear": {
"terms": {
"script": "doc['timestamp'].date.monthOfYear().getAsText()",
"order": {
"_term": "asc"
}
}
}
Run Code Online (Sandbox Code Playgroud)
获得此信息后,您可以将统计数据聚合嵌套在其中:
"aggregations: {
"monthOfYear": {
"terms": {
...
},
"aggregations": {
"stats": ...
}
}
}
Run Code Online (Sandbox Code Playgroud)
这个问题现在已经很老了,但是,希望这对某人有帮助。
| 归档时间: |
|
| 查看次数: |
1240 次 |
| 最近记录: |