【问题标题】:ElasticSearch Aggregation within aggregation聚合内的 ElasticSearch 聚合
【发布时间】:2019-03-11 00:32:24
【问题描述】:

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

文档类型:

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

我想获得所有分数的平均值。我写了简单的聚合返回

(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

【问题讨论】:

  • 嗨@Sagar,你检查我的答案了吗?对你有用吗?

标签: elasticsearch elasticsearch-aggregation


【解决方案1】:

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

{
  "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 子聚合将为每个存储桶/文档计算平均 score。最后,overall_avg 管道聚合将计算平均值的平均值。

【讨论】:

    猜你喜欢
    • 2017-09-24
    • 2014-11-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多