Как выполнить множественную агрегацию на объекте в Elasticsearch с использованием Python?

1

Я хочу выполнить запрос гистограммы даты в моих данных 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. Все другие средние значения переопределяются.

Теги:
elasticsearch
aggregation

1 ответ

1
Лучший ответ

Хорошее начало! Вам нужно сделать это так, и это сработает:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню