ElasticSearch聚合使用doc_count进行平均

时间:2014-02-14 15:39:33

标签: elasticsearch aggregate jodatime

我只是深入研究ElasticSearch 1.0中的新聚合函数。我正在尝试在一堆文档(日志)上获取一些统计数据。

每个文档都算作命中,我想获取给定时间段内每小时的平均点击次数。每个文档都有一个日期时间引用,每个文档都被视为“命中”。

第一位很简单(查询和过滤),我得到了我希望在给定时间段内匹配的所有文档。但我无法弄清楚如何获得平均文件数。

我可以每天,每小时获得所有文档的列表,并在客户端进行一些统计计算,但我很乐意在ElasticSearch中完成所有这些工作。我的猜测是可以通过doc_count完成,但我找不到任何关于它的信息。

我可以在给定的时间范围内获得一小时内所有文件的清单。如果我在一小时内尝试聚合:

"aggregations" : {
    "articles_over_time" : {
        "histogram" : {
            "script" : "doc['created_at'].date.hourOfDay",
            "interval" : 1
        }
    }
}

我得到了一个特定时期内每小时的文件清单,但是它们总和(),我希望得到一个平均值(甚至更好:实际的'统计'汇总)。不在文档字段上,而是在doc_count本身上。有什么想法吗?

1 个答案:

答案 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