В предыдущих статьях я писал про агрегацию bucket и метрик. Теперь рассмотрим комбинированные агрегации. Если описывать простыми словами то это суммирование множественных событий ( документов ).
Например сумма байтов за день со всех документов, количество документов за месяц от одного хоста.
Сортировка по bucket
Для демонстрации рассмотрим пример с подсчётом запросов (FIELD1
) за день и сортировкой по убыванию.
GET mylogs/_search
{
"aggs": {
#тут придумываем сами
"MYFIELD2": {
"date_histogram": {
#поле с датами
"field": "@timestamp",
#каким методо разбивать по дате
"calendar_interval": "day",
#сортировка по daily_number_of_bytes ниже
"order": {
"MYFIELD1": "desc"
}
}
,
"aggs": {
#тут придумываем сами
"MYFIELD1": {
"sum": {
#поле по которому суммировать
"field": "FIELD1"
}
}
}
}
}
}
Использование sub bucket
Для примера рассчитаем количество запросов по методам запроса (FIELD1
) за месяца. Т.е мы создаём верхний bucket
с названием logs_by_month
и подчиненный с названием requests_count
. Это и называется sub bucket.
GET mylogs/_search
{
"aggs": {
"logs_by_month": {
"date_histogram": {
"field": "@timestamp",
"calendar_interval": "month"
}
,
"aggs": {
"requests_count": {
"terms": {
"field": "FIELD1.keyword",
"size": 10
}
}
}
}
}
}
В выводе получим что-то подобное
top_hits
Применяя top_hits вы можете выводить некоторое количество документов при подсчёте чего-либо. Ещё одна возможность реализации sub bucket.
GET mylogs/_search
{
"size": 20,
"query": {
"match": {
"content": "logstash filters"
}
},
"aggs": {
"blogs_by_author": {
"terms": {
"field": "author.keyword"
},
"aggs": {
"top_hits": {
"top_hits": {
"size": 2
}
}
}
}
}
}
В выводе получим отсортированные значения по общему количеству и при этом по 2 документа из каждой группы и их score
.
Комментарии