ElasticSearch聚合使用doc_count进行平均

svd*_*aaf 6 aggregate jodatime elasticsearch

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

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

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

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

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

"aggregations" : {
    "articles_over_time" : {
        "histogram" : {
            "script" : "doc['created_at'].date.hourOfDay",
            "interval" : 1
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Vin*_*han 0

这可以从服务器端本身完成,但需要使用变通方法。hits.total 应该给出文档的总数。您可以对时间戳字段进行最小和最大统计,并从中计算总小时数。现在

(hits.total)/(Total Number of hours) 
Run Code Online (Sandbox Code Playgroud)

应该给你你正在寻找的东西。

还有另一种方法。您可以使用指标聚合脚本功能来通过脚本执行上述操作。链接 - http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-scripted-metric-aggregation.html

但是,您正在寻找的真正功能称为公制减速器。目前尚不可用,但有一个问题 - https://github.com/elasticsearch/elasticsearch/issues/8110