Elasticsearch, группируйте по полю и вычисляйте среднее значение для другого поля - PullRequest
0 голосов
/ 20 февраля 2019

Отображение:

player_id: int
stat_date: date
some_param: int

Мне нужно вычислить среднее значение для "some_param" для каждой строки player_id с максимальным значением "stat_date" в случае нескольких строк с одинаковым player_id.

Такмне нужно среднее значение за последнюю дату для всех игроков

Этот фрагмент не работает из-за того, что «Aggregator [average_val] типа [avg] не может принимать подгруппы»

get test/test/_search
{
  "size":0,
  "aggs": {
    "average_val":{
      "avg": {
        "field": "some_param"
      },
      "aggs": {
        "by_player": {
          "terms": { "field" : "player_id" },
          "aggs" : {
              "by_date" : { 
                "max" : { "field" : "stat_date" } 
              }
          }
        }
      }
    }
  }
}

Самый простой способиспользовать простой avg

get test/test/_search
{
  "size":0,
  "aggs": {
    "averages": {
      "avg": {
        "field": "some_param"
      }
    }
  }
}

Но мне нужно рассчитывать avg player "some_param" только для последних дат статистики.

1 Ответ

0 голосов
/ 20 февраля 2019

Я думаю, вам просто нужно изменить порядок агрегации.Положите среднюю агрегацию в самую глубокую агрегацию, и она должна работать нормально

Существует два основных типа агрегации.Avg является агрегацией метрик и выводит метрики (числа).Вам нужно будет поместить агрегирование сегментов (например, агрегирование терминов) снаружи и выполнить агрегирование метрик для их вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...