ElasticSearch计算每个存储桶占总数百分比

js4nwp54  于 2022-12-03  发布在  ElasticSearch
关注(0)|答案(1)|浏览(178)

我正在使用ElasticSearch v5。我尝试做一些类似于Elasticsearch analytics percent中描述的事情,其中我有一个术语聚合,我想计算一个百分比,它是每个桶的值占所有桶的总和。这是我的请求:

{
  "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
    }
  }
}

如何从ElasticSearch中计算bucket中每个项目的“balance”/“total_balance”?我在bucket中尝试了bucket脚本聚合(periods)级别,但我不能将buckets_path设置为total_balance。这篇文章https://discuss.elastic.co/t/combining-two-aggregations-to-get-term-percentage/22201讨论了使用重要条款聚合,但我需要使用特定字段进行计算,而不是doc_count。我知道我可以在客户端进行简单计算。但如果可能的话,我想在ElasticSearch中一起完成这些工作。

ttcibm8c

ttcibm8c1#

不,你不能这么做。在我写这篇文章的时候,我们已经是6.1版本了。
根据https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline.html#buckets-path-syntax,只有两种主要类型的聚合管道:父母和兄弟姐妹。
因此,为了从期间存储桶中引用total_balance聚合,我们应该能够从buckets_path属性引用“叔叔”聚合,但这是不可能的。

相关问题