2017-04-20 338 views
12

我正在使用ElasticSearch v5。我正在尝试执行类似于Elasticsearch analytics percent中描述的类似操作,其中我有一个术语聚合,我想计算一个百分比,这个百分比是每个存储桶中所有存储桶总数的一个值。这是我的要求:ElasticSearch从总数中计算每个存储桶的百分比

{ 
    "query": { 
    "match_all": {} 
    }, 
    "aggs": { 
    "periods": { 
     "terms": { 
     "field": "periods", 
     "size": 3 
     }, 
     "aggs": { 
     "balance": { 
      "sum": { 
      "field": "balance" 
      } 
     } 
     } 
    }, 
    "total_balance": { 
     "sum_bucket": { 
      "buckets_path": "periods>balance" 
     } 
    } 
    } 

}

结果我得到的回报,这是这样的:

{ 
    "aggregations": { 
    "periods": { 
     "doc_count_error_upper_bound": 0, 
     "sum_other_doc_count": 1018940846, 
     "buckets": [ 
     { 
      "key": 1177977600000, 
      "doc_count": 11615418, 
      "balance": { 
      "value": 2492032741768.1616 
     } 
     }, 
     { 
      "key": 1185926400000, 
      "doc_count": 11592425, 
      "balance": { 
      "value": 2575365325406.6533 
     } 
     }, 
     { 
      "key": 1175385600000, 
      "doc_count": 11477402, 
      "balance": { 
      "value": 2456256695380.8306 
      } 
     } 
     ] 
    }, 
    "total_balance": { 
     "value": 7523654762555.645 
    } 
    } 
} 

如何计算“平衡” /“total_balance”在桶中的每个项目来自ElasticSearch?我在桶(句号)级尝试了桶脚本聚合,但我无法将我的buckets_path设置为total_balance。这篇文章https://discuss.elastic.co/t/combining-two-aggregations-to-get-term-percentage/22201谈到了使用重要术语聚合,但我需要计算使用特定的字段,而不是doc_count。我知道我可以在客户端做一个简单的计算,但如果可能的话,我想在ElasticSearch中完成这一切。

+0

您可以添加到您的问题:您在elasticsearch中编制索引的源数据,并手动计算想要实现的结果? – paweloque

回答