如何在elasticsearch中计算“不同平均值”?我有一些非规格化数据,如下所示:
{ "record_id" : "100", "cost" : 42 }
{ "record_id" : "200", "cost" : 67 }
{ "record_id" : "200", "cost" : 67 }
{ "record_id" : "200", "cost" : 67 }
{ "record_id" : "400", "cost" : 11 }
{ "record_id" : "400", "cost" : 11 }
{ "record_id" : "500", "cost" : 10 }
{ "record_id" : "600", "cost" : 99 }
注意对于给定的“record_id”,“成本”总是相同的。
因此,根据上述数据:
1.如何获得“成本”字段的平均值,但按“record_id”区分?结果将是(42+67+11+10+99)/5=45.8
1.如何获得“cost”字段的SUM值,但按“record_id”区分?结果将是42+67+11+10+99=229
我可以使用“terms”聚合,然后是“first”和“average”子聚合的组合吗?我的想法是这样的:elasticsearch calculate average of unique values
1条答案
按热度按时间polhcujo1#
它不适用于
terms
aggs。下面是使用无痛脚本可以实现的功能:索引--您的实际Map可能与生成的默认Map不同(特别是
rec_id
上的.keyword
部分):然后聚合
屈服