gpt4 book ai didi

elasticsearch - 如何使用 Elasticsearch 进行年度汇总?

转载 作者:行者123 更新时间:2023-11-29 02:50:06 25 4
gpt4 key购买 nike

假设我在文档上有一个日期字段,我知道使用 date_histogram 聚合我可以按日、月、年等获取文档计数。

我想要做的是获取几年内一月、二月、三月等的平均文档数。在给定的几周内,星期一、星期二、星期三等也是如此。有没有办法只使用相同的日期字段来做到这一点,或者使用 Elasticsearch 实现这一点的最佳方法是什么?


示例

假设我们在三年内下了一堆订单:

  • 2012 年 - 1 月(10 个订单)、2 月(5 个订单)、3 月(7 个订单)、4 月(11 个订单)等
  • 2013 年 - 1 月(13 个订单)、2 月(7 个订单)、3 月(12 个订单)、4 月(15 个订单)等。
  • 2014 年 - 1 月(10 个订单)、2 月(7 个订单)、3 月(6 个订单)、4 月(13 个订单)等。

我想要的是给定年份中每个月的平均值,因此输出将是:

1 月(10 + 13 + 10/3 = 11 个订单)、2 月(6.33 个订单)、3 月(8.33 个订单)、4 月(13 个订单)等

如果这可以概括为 N 年(或 N 个一月等),这样我们就可以在任何日期范围内进行搜索,那将是最好的。

最佳答案

您可以像这样使用“monthOfYear”:

"aggregations": {
"timeslice": {
"histogram": {
"script": "doc['timestamp'].date.getMonthOfYear()",
"interval": 1,
"min_doc_count": 0,
"extended_bounds": {
"min": 1,
"max": 12
},
"order": {
"_key": "desc"
}
}
}

扩展边界将确保您获得每个月的值(即使它为零)。

如果您想要月份名称,您可以在自己的代码中执行此操作,或者执行此操作(结果是您不会获得没有数据的月份的值):

"aggregations": {
"monthOfYear": {
"terms": {
"script": "doc['timestamp'].date.monthOfYear().getAsText()",
"order": {
"_term": "asc"
}
}
}

一旦你有了这个,你就可以在这个里面嵌套你的统计聚合:

"aggregations: {
"monthOfYear": {
"terms": {
...
},
"aggregations": {
"stats": ...
}
}
}

这个问题现在已经很老了,但是,希望这对某人有所帮助。

关于elasticsearch - 如何使用 Elasticsearch 进行年度汇总?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25924019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com