Разберём распределённый top-N, приблизительные показатели и ограничение числа buckets.
Примеры course-products используют учебную схему и товар из главы 5 «Mapping и типы полей». Разборы упражнений ниже используют отдельный публичный набор тренажёра.
- Локальные кандидаты и глобальный ответ
- Приближение и полный обход
- Стоимость дерева
Разберём распределённый top-N, приблизительные показатели и ограничение числа buckets.
Курс ориентирован на Elasticsearch 9.4.3. Разборы упражнений используют публичный набор products; остальные запросы показывают отдельные учебные индексы и могут требовать подготовки или прав, недоступных в тренажёре. Ответы сокращены, score может меняться. Для расширенных функций проверяйте лицензию и вариант развёртывания.
Локальные кандидаты и глобальный ответ
terms сначала выбирает кандидатов на шардах, затем объединяет их. Бренд, не попавший в локальный список, может потерять часть счётчика в глобальном ответе. size ограничивает итог, shard_size расширяет локальный список и повышает стоимость. sum_other_doc_count и doc_count_error_upper_bound помогают интерпретировать неполноту, но доступность границ зависит от порядка сортировки.
СамопроверкаПриближение и полный обход
cardinality оценивает число уникальных значений, а percentiles — распределение с приближением. Параметр точности не превращает их в безусловно точные вычисления. Composite aggregation позволяет обходить комбинации ключей страницами: используйте возвращённый after_key, а не выдуманный ключ последнего bucket. Изменение данных между страницами требует согласованной стратегии чтения.
СамопроверкаСтоимость дерева
Pipeline aggregations вычисляют показатели по уже полученным buckets: например, изменение продаж или скользящее среднее. Они не восстанавливают группы, которые были отброшены предыдущим top-N. Вложенные terms могут перемножать число buckets, а высокая кардинальность увеличивает память. Проверяйте search.max_buckets, circuit breakers и размер ответа до масштабирования аналитического запроса.
Ответ cardinality — оценка; не используйте её как бухгалтерский инвариант.
{
"size": 0,
"aggs": {
"brand_count": {
"cardinality": {
"field": "brand",
"precision_threshold": 1000
}
}
}
}Как читать результат
Ответ cardinality — оценка; не используйте её как бухгалтерский инвариант.
Разбор на примере каталога
Пусть бренд X занимает второе место на каждом шарде, а локально выбирается только первый. Глобально X может быть важным, но координатор не получит его полный вклад. Увеличение итогового size не всегда заменяет достаточный локальный shard_size. Для полного обхода всех ключей используют composite, а не бесконечное увеличение terms.size. Если отчёт финансово значим, заранее определите допустимость приближений и при необходимости считайте точный показатель в системе с соответствующими гарантиями.
СамопроверкаСамопроверка
Сначала ответьте самостоятельно, затем раскройте объяснение.
1. Почему terms может терять счётчик?
Некоторые shard-local кандидаты не попали в отправленный список.
2. Что даёт shard_size?
Расширяет локальный список кандидатов ценой памяти и передачи данных.
3. Cardinality всегда точен?
Нет, это приближённая метрика.
4. Как продолжать composite?
Передавать возвращённый after_key.
5. Pipeline восстановит отброшенные группы?
Нет, он работает с уже полученными buckets.
Ситуационный разбор модуля: Агрегации и аналитика
Покупатель выбрал Sony, но должен видеть доступность других брендов в текущей категории. У товара несколько предложений. Определите область каждого счётчика и объясните, почему сумма buckets может отличаться от числа товаров.
Критерии самопроверки
Определены query/post_filter или отдельные filter-области, доступ сохранён, nested offers не выданы за число корневых товаров, учтена точность terms.
Краткая памятка
- Некоторые shard-local кандидаты не попали в отправленный список.
- Расширяет локальный список кандидатов ценой памяти и передачи данных.
- Нет, это приближённая метрика.
- Передавать возвращённый after_key.
- Нет, он работает с уже полученными buckets.
Официальная документация
Готовы применить знания?
Подтвердите прочтение, чтобы сохранить своё место. Чтение и решение заданий учитываются отдельно в этом браузере с помощью гостевой cookie.