Выполнение сложных вычислений по набору данных в ElasticSearch

Как выполнить сложный расчет в ElasticSearch, требующий нахождения максимального и минимального значений для записи в индексе?

Следующий пример глуп, но служит для иллюстрации.

Учитывая объект User, который сохраняется в индексе:

class User {
   String name
   int age;
}

требование состоит в том, чтобы для всех пользователей с одинаковым именем получить разницу между самым младшим и самым старшим возрастом.

Например, учитывая следующий набор данных:

Name    Age
Tom     20
Tom     35
Tom     45
Sam     10
Sam     50
Sam     90

расчет даст следующие результаты:

Tom = (45-20) = 25
Sam = (90-10) = 80

После вычисления значений в ElasticSearch они должны быть доступны в Kibana.

Я новичок в ElasticSearch, и любые примеры кода очень ценятся.


person user1052610    schedule 27.04.2015    source источник


Ответы (1)


Вы можете получить min и max для каждого пользователя, остальное вам нужно сделать со стороны клиента -

{
  "aggs": {
    "users": {
      "terms": {
        "field": "Name"
      },
      "aggs": {
        "maxAge": {
          "max": {
            "field": "age"
          }
        },
        "minAge": {
          "min": {
            "field": "age"
          }
        }
      }
    }
  }
}

Здесь вам нужно создать сегмент для каждого имени, используя агрегация терминов. Для каждого ведра вам нужно получить максимальное и минимальное значение, используя максимальное и минимальное агрегирование.

Остальное вам нужно позаботиться на стороне клиента.

person Vineeth Mohan    schedule 27.04.2015
comment
Спасибо. Как и где этот JSON применяется или добавляется в ElasticSearch? - person user1052610; 27.04.2015