2015-11-05 20 views
3

更新問題Elasticsearch - 計算相對於嵌套聚集百分比於母公司鬥

在我查詢我的日期彙總,然後在傳感器的名稱。可以根據嵌套聚合和父桶的文檔總數(或任何其他聚合)計算比率?例如查詢:

{ 
    "size": 0, 
    "aggs": { 
    "over_time": { 
     "aggs": { 
     "by_date": { 
      "date_histogram": { 
      "field": "date", 
      "interval": "1d", 
      "min_doc_count": 0 
      }, 
      "aggs": { 
      "measure_count": { 
       "cardinality": { 
       "field": "date" 
       } 
      }, 
      "all_count": { 
       "value_count": { 
       "field": "name" 
       } 
      }, 
      "by_name": { 
       "terms": { 
       "field": "name", 
       "size": 0 
       }, 
       "aggs": { 
       "count_by_name": { 
        "value_count": { 
        "field": "name" 
        } 
       }, 
       "my ratio": count_by_name/all_count * 100 <-- How to do that? 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

我想自定義指標,讓我比count_by_name/ALL_COUNT * 100這是可能的ES,還是我來計算在客戶端上? 這對我來說似乎很簡單,但我還沒找到辦法。

舊文章:

有沒有辦法讓Elasticsearch考慮文件的總體數量(或任何其他度量)計算平均值的水桶是什麼時候?

例如: 我有100000個傳感器在不同的時間產生事件。每個事件都被編入索引爲具有時間戳和值的文檔。

當我想計算該值與日期直方圖的比率,並且某些傳感器一次只生成值時,我希望Elasticsearch將傳感器的不存在的值(文檔)視爲0而不是null。因此,當每天聚合並且傳感器僅在晚上10點(3)和晚上11點(5)產生兩個值時,當天的聚合應該是(3 + 5)/ 24或正式:SUM(VALUE)/ 24。

相反,Elasticsearch計算像(3 + 5)/ 2這樣的平均值,在我的情況下這是不正確的。

在Github上有一張票https://github.com/elastic/elasticsearch/issues/9745,但答案是「在你的應用程序中處理它」。這對我來說不是答案,因爲我必須爲每個傳感器/時間組合生成零價值文檔的無數次,才能獲得正確的平均比率。

對此的任何想法?

+0

你能否提供一個樣本文件和您發送的聚合請求 –

+0

我更新了問題並添加了一個示例查詢 –

回答

0

如果是這種情況,只需從應用程序端將結果除以24即可。當粒度發生變化時,相應更改此值。每天的小時數是固定的....

+0

每個文檔都有必需的字段,這不是問題。我的問題是計算嵌套聚合與父母之間的比率。 –