2014-02-14 64 views
6

我只是潛入ElasticSearch 1.0中的新聚合函數。我試圖從一堆文檔(loglines)中獲取一些統計數據。ElasticSearch聚合使用doc_count平均

每個文檔都算作命中,我希望獲取給定時間內每小時的平均點擊次數。每個文檔都有一個日期時間參考,並且每個文檔都算作'hit'。

第一位很容易(查詢和過濾),並且我得到了所有我想匹配的文檔。但我無法弄清楚如何獲得文檔數量的平均值。

我可以每天,每小時獲取所有文檔的列表,並在客戶端進行一些統計計算,但我希望能夠在ElasticSearch中完成所有工作。我的猜測是可以通過doc_count完成,但我無法找到任何信息。

我可以在給定的時間範圍內在一小時內得到所有文檔的列表。如果我嘗試這與聚集在小時:

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

我得到的一定期間內每小時的文件清單,但它們之和()「編在一起,我很想得到一個平均(或甚至更好:實際的'統計'聚合)。不是在文檔字段上,而是在doc_count本身上。有任何想法嗎?

+0

您是否找到了解決方案? – pvledoux

+0

不,我結束了對客戶端代碼的聚合,到目前爲止我還沒有找到任何解決方案來做到這一點。 – svdgraaf

+0

謝謝,我終於在客戶端做到了。我敢肯定這是可能的,但我錯過了一些東西... – pvledoux

回答

1

這可以從服務器端本身完成,但使用工作。 hits.total應給出文件總數。您可以在時間戳字段中進行最小和最大統計,並從中計算總小時數。 現在

(hits.total)/(Total Number of hours) 

應該給你你要找的。

還有另一種方法。您可以使用度量彙總腳本功能使用腳本執行上述操作。 LINK - http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-scripted-metric-aggregation.html

但是,您正在尋找的真正特徵被稱爲公制減速器。 它現在不可用,但它有一個問題 - https://github.com/elasticsearch/elasticsearch/issues/8110