Elasticsearch,按字段分组并计算另一个字段的平均值

时间:2019-02-19 21:24:40

标签: elasticsearch

映射:

"angular-cli": "^1.0.0-beta.28.3",

如果有几行具有相同的player_id,我需要为每个使用过的player_id的行计算平均值,其中每一行的max_stat_date为最大值。

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

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

player_id: int
stat_date: date
some_param: int

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

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

但是我只需要为最近的统计日期计算平均播放器“ some_param”。

1 个答案:

答案 0 :(得分:0)

我认为您只需要反转聚合的顺序即可。将avg聚合置于最深层的聚合中,它应该可以正常工作。

聚合有两种主要类型。平均是指标汇总,并输出指标(数字)。您需要将存储桶聚合(如术语聚合)放在外部,并对它们的输出进行指标聚合。