聚合中的 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
管道聚合将计算平均值的平均值。
我正在尝试为 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
管道聚合将计算平均值的平均值。