Разберём структуры, которые делают поиск быстрым, и связь между возможностями поля и стоимостью хранения.
Примеры course-products используют учебную схему и товар из главы 5 «Mapping и типы полей». Разборы упражнений ниже используют отдельный публичный набор тренажёра.
- Текст товара
- Термы → posting lists
- Пересечение → кандидаты
Разберём структуры, которые делают поиск быстрым, и связь между возможностями поля и стоимостью хранения.
Курс ориентирован на Elasticsearch 9.4.3. Разборы упражнений используют публичный набор products; остальные запросы показывают отдельные учебные индексы и могут требовать подготовки или прав, недоступных в тренажёре. Ответы сокращены, score может меняться. Для расширенных функций проверяйте лицензию и вариант развёртывания.
От терма к документу
Обычный документ отвечает на вопрос «какие слова в товаре?». Инвертированный индекс отвечает на обратный вопрос: «в каких документах встречается слово?». Для wireless хранится список документов, а позиции позволяют проверять порядок и расстояния. Пересечение списков ускоряет AND, объединение — OR. Анализатор определяет термы до того, как запрос начнёт искать.
СамопроверкаРазные структуры для разных задач
_source нужен для возврата полей. Инвертированный индекс помогает отбирать по термам, point-структуры — по числам и пространственным значениям. Doc values дают ориентированное на столбцы чтение для сортировки и агрегаций. Хранение строки в _source не делает её автоматически доступной для любого способа поиска: возможности зависят от mapping.
СамопроверкаЦена возможностей
Multi-fields создают несколько индексируемых представлений одного значения. Позиции нужны фразовому поиску, но занимают место; offsets могут помогать подсветке. Отключение индексации или doc values требует понимания будущих запросов. Не включайте fielddata для больших text-полей как универсальное исправление агрегаций: обычно нужен keyword-подтип.
Mapping показывает доступные представления полей, а не физические posting lists.
GET /course-products/_mappingКак читать результат
Mapping показывает доступные представления полей, а не физические posting lists.
Разбор на примере каталога
Возьмём товары 1: «wireless headphones» и 2: «wireless speaker». У терма wireless список [1,2], у headphones — [1]. Пересечение даёт [1], объединение — [1,2]. Чтобы вернуть название найденного товара, нужен доступ к значению документа, а чтобы отсортировать кандидатов по цене — к числовым значениям. Эти операции используют разные структуры. Поэтому поле может быть пригодно для возврата в JSON, но непригодно для выбранной агрегации: наличие значения в документе не равно наличию нужного поискового представления.
СамопроверкаСамопроверка
Сначала ответьте самостоятельно, затем раскройте объяснение.
1. Что такое posting list?
Список документов, содержащих терм, с дополнительными сведениями о вхождениях.
2. Зачем позиции?
Чтобы отличать порядок слов и проверять близость во фразах.
3. Для чего doc values?
Для столбцового доступа при сортировке, агрегациях и ряде скриптов.
4. Почему _source недостаточно для поиска?
Поиск использует подготовленные структуры, а не автоматически перебирает JSON всех документов.
5. Чем опасен fielddata?
Большим потреблением heap при загрузке значений text-полей.
Краткая памятка
- Список документов, содержащих терм, с дополнительными сведениями о вхождениях.
- Чтобы отличать порядок слов и проверять близость во фразах.
- Для столбцового доступа при сортировке, агрегациях и ряде скриптов.
- Поиск использует подготовленные структуры, а не автоматически перебирает JSON всех документов.
- Большим потреблением heap при загрузке значений text-полей.
Официальная документация
Готовы применить знания?
Подтвердите прочтение, чтобы сохранить своё место. Чтение и решение заданий учитываются отдельно в этом браузере с помощью гостевой cookie.