python - 如何使用 Python 对 Elasticsearch 中的对象执行多重聚合?
问题描述
我想对我的 Elasticsearch 数据执行日期直方图查询,其格式为:
datetime,field_obj
field_obj 包含三个字段:a,b,c
除了日期直方图聚合,我还想找到 field_obj 的平均值,即 avg(field_a)、avg(field_b)、avg(field_c)。我试着这样解决:
res = es.search(index="demo",body={"from": 0, "size": 0, "query":
{"match_all": {}}, "aggs": {
"date_avg": {
"date_histogram": {"field": "datetime","interval": "year"},
"aggs": {"avg_a": {"avg": {"field": "field.a"}}},
"aggs": {"avg_b": {"avg": {"field": "field.b"}}},
"aggs": {"avg_c": {"avg": {"field": "field.c"}}},
}}
})
但是,此查询仅产生 field_c 的平均值。所有其他平均值都被覆盖。
解决方案
好的开始!你需要这样做,它会起作用:
res = es.search(index="demo",body={
"from": 0,
"size": 0,
"query": {
"match_all": {}
},
"aggs": {
"date_avg": {
"date_histogram": {
"field": "datetime",
"interval": "year"
},
"aggs": {
"avg_a": {
"avg": {
"field": "field.a"
}
},
"avg_b": {
"avg": {
"field": "field.b"
}
},
"avg_c": {
"avg": {
"field": "field.c"
}
}
}
}
}
})