我只是深入研究ElasticSearch 1.0中的新聚合函数。我正在尝试在一堆文档(日志)上获取一些统计数据。
每个文档都算作命中,我想获取给定时间段内每小时的平均点击次数。每个文档都有一个日期时间引用,每个文档都被视为“命中”。
第一位很简单(查询和过滤),我得到了我希望在给定时间段内匹配的所有文档。但我无法弄清楚如何获得平均文件数。
我可以每天,每小时获得所有文档的列表,并在客户端进行一些统计计算,但我很乐意在ElasticSearch中完成所有这些工作。我的猜测是可以通过doc_count完成,但我找不到任何关于它的信息。
我可以在给定的时间范围内获得一小时内所有文件的清单。如果我在一小时内尝试聚合:
"aggregations" : {
"articles_over_time" : {
"histogram" : {
"script" : "doc['created_at'].date.hourOfDay",
"interval" : 1
}
}
}
我得到了一个特定时期内每小时的文件清单,但是它们总和(),我希望得到一个平均值(甚至更好:实际的'统计'汇总)。不在文档字段上,而是在doc_count本身上。有什么想法吗?
答案 0 :(得分:0)
这可以从服务器端本身完成,但使用解决方法。 hits.total应该给出文档的总数。您可以在时间戳字段上执行最小和最大统计,并从该计算中计算总小时数。 现在
(hits.total)/(Total Number of hours)
应该给你你想要的东西。
还有另一种方法。您可以使用度量标准聚合脚本功能使用脚本执行上述操作。 链接 - http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-scripted-metric-aggregation.html
但是,您正在寻找的真正功能称为公制减速器。 它现在不可用,但之后就出现了问题 - https://github.com/elasticsearch/elasticsearch/issues/8110