如何使用Python在Elasticsearch中的对象上执行多次聚合? [英] How to perform multiple aggregation on an object in Elasticsearch using Python?

查看:179
本文介绍了如何使用Python在Elasticsearch中的对象上执行多次聚合?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想对以下格式的Elasticsearch数据执行日期直方图查询:

I want to perform date histogram query on my Elasticsearch data which is of the format:

datetime,field_obj 和field_obj中有三个字段: a,b,c

datetime,field_obj and field_obj has three fields in it: a,b,c

我想对日期日期直方图进行汇总求出field_obj的平均值,即avg(field_a),avg(field_b),avg(field_c)。
我尝试过这样计算:

Alongside date histogram aggregation, I want to find the average of field_obj i.e avg(field_a), avg(field_b), avg(field_c) also. I tried working it out like this:

    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的平均值。

However, this query only yields an average of field_c. All the other averages are getting overridden.

推荐答案

好的开始!您需要这样做,这样才能正常工作:

Good start! You need to do it like this and it will work:

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

这篇关于如何使用Python在Elasticsearch中的对象上执行多次聚合?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆