Рассмотрим один из 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, за исключением того, что оно может применяться к любому числовому полю |
Комментарии