Агрегации OpenSearch: Групп, метрик и конвейерные с примерами

Фреймворк агрегации - это мощный инструмент, встроенный в каждую систему OpenSearch. В OpenSearch агрегация - это сбор или объединение связанных вещей. Фреймворк агрегации собирает данные на основе документов, соответствующих поисковому запросу, что помогает создавать сводки данных.

С помощью агрегаций можно не только искать данные, но и делать шаг вперед, извлекая аналитическую информацию. Агрегации используются в Kibana повсеместно: в инструментальных панелях, приложении APM, приложении Machine Learning и т.д.

Применение фреймворка агрегаций

Агрегации также широко используются в обычных случаях поиска, например, на сайтах электронной коммерции. В таких случаях результаты поиска обычно предоставляются с набором фильтров, которые учитывают только объем набора результатов поиска. Затем пользователю предоставляется возможность дальнейшей фильтрации, например, по категории товара, цвету, диапазону цен и т.д. Эти параметры фильтрации обычно сопровождаются метрическими показателями, позволяющими пользователю получить представление, например, о том, сколько товаров в каждой категории содержится в результатах поиска.

Подобные возможности возможны только при использовании фреймворка агрегации.

Другие примеры использования фреймворка агрегации включают следующие:

  • Среднее время загрузки веб-сайта
  • Наиболее ценные клиенты на основе объема транзакций
  • Гистограмма, показывающая некоторую метрику (количество, среднее, сумму, ...) для событий, произошедших в динамически генерируемые периоды времени
  • Количество товаров в каждой товарной категории.

Ниже приведены различные типы агрегаций.

Типы агрегаций

Ведерные агрегации

Относится к агрегации, при которой документы группируются в "ведра", называемые также "корзинами", на основе значений полей, диапазонов или других критериев в документе. При выполнении агрегации документы помещаются в соответствующую корзину (корзины). Таким образом, можно разделить набор счетов на несколько ведер, по одному для каждого клиента, системные журналы разделить на "ошибки", "предупреждения" и "информацию", а данные о производительности процессора разделить на почасовые ведра. Выходные данные состоят из списка ведер, каждое из которых имеет ключ и количество документов. Вот некоторые примеры агрегации ведер:

  • Гистограмм
  • Диапазонов
  • Терминов
  • Фильтров
  • Географических расстояний
  • Диапазонов IP.

Агрегации метрик

Это агрегации, которые вычисляют метрики, такие как сумма или среднее значение, на основе значений полей. В основном относится к математическим вычислениям, выполняемым по набору документов, обычно на основе значений числовых полей, присутствующих в документе, таких как COUNT, SUM, MIN, MAX, AVERAGE и т.д. Метрики могут выполняться на верхнем уровне, но часто более полезны в качестве подагрегации для вычисления значений для агрегации ведра.

Конвейерные агрегации

Агрегации, которые получают входные данные не из документов или полей, а из других агрегаций. Такие агрегации позволяют производить агрегацию на основе результата другой агрегации, а не на основе набора документов. Обычно такие агрегации используются для определения среднего количества документов в корзине или для сортировки корзин на основе метрики, полученной в результате агрегации метрик.

Синтаксис агрегирования

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

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

Следует обратить внимание на некоторые моменты:

  • Агрегаты и агрегированные данные можно использовать как взаимозаменяемые понятия. Каждый агрегат (или подагрегат) имеет имя (в данном случае - по стране и складу).
  • Мы установили размер результатов равным 0, что означает, что мы не получим ни одного совпадения в ответе. Это совсем не редкость и даже рекомендуется.
  • В примере мы использовали только типы агрегации terms (агрегация bucket) и sum (агрегация metric), однако фреймворк агрегации предлагает гораздо больше возможностей.
  • Мы использовали агрегацию по странам. Обратите внимание, что агрегация по странам фактически создает ведра (группы) результатов, а агрегация по запасам дает метрику для каждого ведра. Вы можете вложить столько агрегаций ведер, сколько захотите, прежде чем мы окончательно (и по желанию) выполним агрегацию метрик.

Вложенные агрегации

Можно вложить агрегаты друг в друга (это не имеет отношения к вложенным полям), чтобы разделить баки на подбаки или вычислить метрики на основе подбаков. Приведенная ниже агрегация разделит все результаты экзаменов по полу ученика и вычислит среднее значение результатов для каждого пола. В данном случае важно понимать, что вторая агрегация будет вычисляться на отдельном наборе ведер, а не на наборе документов в целом.

Производительность агрегации

Агрегации обычно выполняются в оперативной памяти и требуют иной структуры доступа к документу, чем поисковый запрос, получаемый из инвертированного индекса, поэтому при построении агрегаций важно учитывать влияние производительности. Наиболее важными соображениями являются:

Количество ведер

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

Количество документов

При выполнении агрегации желательно (если это возможно) настроить запрос таким образом, чтобы агрегация выполнялась только по ограниченному набору интересующих вас документов, а не по запросу match_all. Это позволит сократить объем памяти, необходимый для выполнения агрегации.

Fielddata

Агрегация, как правило, всегда должна выполняться по полям типа "keyword ", а не по анализируемому тексту. Запуск по анализируемому тексту возможен при использовании маппинга "fielddata": "true", но это требует больших затрат памяти, и по возможности от этого следует отказаться.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий