Elasticsearch,逐个字段并计算另一个字段的平均值

问题描述 投票:0回答:1

制图:

player_id: int
stat_date: date
some_param: int

我需要计算每个player_id使用行的“some_param”的平均值,如果有几行具有相同的player_id,则使用max“stat_date”。

所以我需要所有玩家的最后日期的平均值

由于“[avg]类型的聚合器[average_val]无法接受子聚合,因此该片段无法正常工作”

get test/test/_search
{
  "size":0,
  "aggs": {
    "average_val":{
      "avg": {
        "field": "some_param"
      },
      "aggs": {
        "by_player": {
          "terms": { "field" : "player_id" },
          "aggs" : {
              "by_date" : { 
                "max" : { "field" : "stat_date" } 
              }
          }
        }
      }
    }
  }
}

最简单的方法是使用简单的平均值

get test/test/_search
{
  "size":0,
  "aggs": {
    "averages": {
      "avg": {
        "field": "some_param"
      }
    }
  }
}

但是我只需要为最后的统计日期计算平均玩家“some_param”。

elasticsearch
1个回答
0
投票

我想你只需要颠倒聚合的顺序。将avg聚合放在最深的聚合中,它应该可以正常工作。

有两种主要的聚合类型。 Avg是度量标准聚合,它输出指标(数字)。您需要在外部放置Bucket Aggregations(如术语聚合),并为其输出执行指标聚合。

© www.soinside.com 2019 - 2024. All rights reserved.