聚合中的 ElasticSearch 聚合

ElasticSearch Aggregation within aggregation

我正在尝试为 ElasticSearch 编写聚合脚本。

文件类型:

{
  Score: [1 , null, 3]
},
{
  Score: [2, 4, null + 3]
}

我想得到所有分数的平均值。我写了简单的聚合 returns

(1 + 3 + 2 + 4 + 3) / 5 = 2.6

但我想对每个文档进行平均得分,然后取平均值。 例如

[1 + 3] / 2 (# of scores in first document)
+
[2 + 4 + 3] / 3 (# of scores in second document)
= (2 + 3) / 2 (# of documents)
= 2.5

我认为这个查询就是您要找的:

{
  "size": 0,
  "aggs": {
    "group_by_id": {
      "terms": {
        "field": "_id"
      },
      "aggs": {
        "avg_by_group": {
          "avg": {
            "field": "score"
          }
        }
      }
    },
    "overall_avg": {
      "avg_bucket": {
        "buckets_path": "group_by_id>avg_by_group"
      }
    }
  }
}

说明

group_by_id 聚合将为每个文档创建一个桶,avg_by_group 子聚合将为每个 bucket/document 计算平均值 score。最后,overall_avg 管道聚合将计算平均值的平均值。