Рассмотрим один из 4 методов агрегации в elasticsearch. Агрегация метрик возвращает вычисленное значение из набора документов.
Для понятия сути агрегации метрик рассмотрим несколько примеров применения:
- Например расчитать сумму байт всех доументов в
index - Расчитать серднее время ответа
- Расчитать минимальное время ответа
- Максимальное количество байт переданное в ответе
Aggs
Собствено aggs и используется для агрегации метрик. Можно выделить 2 важных поля в запросе при использовании aggs. Это aggregation name ( имя, котрое будет выведенно в результатах запроса ) и AGG_TYPE ( тип агрегации ).
GET INDEX/_search {
"aggs": {
"AGGREGATION_NAME": {
"AGG_TYPE": {
"sum": {
"field": "FIELD1"
}
}
}
}
}
Результаты агрегации (Aggregation Results)
В результате выполнения запроса с агрегацией добавится секция aggregations, в которой и будет результат запроса.
...
"aggregations": {
"AGGREGATION_NAME": {
"value": 10
}
}
Также в выоде пудут 10 первых документов, и если вы хотите исключить их из вывода, например для ускорения запросы можно выставить size в 0. Про size можно почитать тут.
GET INDEX/_search {
"size": 0,
"aggs": {
"AGGREGATION_NAME": {
"sum": {
"field": "FIELD1"
}
}
}
}
Естественно можно и даже нужно использовать с query.
GET INDEX/_search {
"size": 0,
"query": {
"match": {
"FIELD1": "TEXT1"
}
},
"aggs": {
"AGGREGATION_NAME": {
"sum": {
"field": "FIELD1"
}
}
}
}
Для вычисления медианы можно использовать percentiles.
GET INDEX/_search
{
"size": 0,
"query": {
"match": {
"FIELD1": "TEXT1"
}
},
"aggs": {
"my_agg": {
"percentiles": {
"field": "FIELD1"
, "percents": [
50
]
}
}
}
}
cardinality
Чтобы расчитать количество уникальных значений поля можно восспользоваться cardinality. Можно использовать например для подсчета уникальных пользователей.
GET INDEX//_search
{
"aggs": {
"my_agg": {
"cardinality": {
"field": "FIELD1.keyword"
}
}
}
}
Таблица типов агрегаций (AGG_TYPE)
| Имя | Функция |
|---|---|
| sum | суммирование |
| min | минимальное значение |
| max | максимальное значение |
| avg | серднее значение |
| percentiles | перцентиль |
| cardinality | вычисляет количество различных значений для заданного поля |
| boxplot | вычисляет коробчатую диаграмму числовых значений |
| geo_bounds | |
| geo_centroid | |
| matrix_stats | |
| rate | вычисляет курс документов или поля в каждом сегменте |
| date_histogram | количество документов разбитое по датам |
| histogram | похоже на агрегирование date_histogram, за исключением того, что оно может применяться к любому числовому полю |


Комментарии