РуководствоПоиск и merchandising

Elasticsearch: что это и как настроить поиск магазина

Что такое Elasticsearch и как он работает в интернет-магазине: индексы, документы, полнотекстовый поиск, анализаторы, релевантность, Docker и эксплуатация.

Редакция Торгсреды10 мин чтения
Инженер проверяет поиск Elasticsearch по большому каталогу товаров

Elasticsearch помогает интернет-магазину искать товары по названиям, описаниям, артикулам и характеристикам, одновременно применять фильтры и сортировать результаты по релевантности. Но сам движок не знает, какой товар бизнес считает лучшим. Качество зависит от модели данных, анализаторов, синонимов, правил ранжирования и набора тестовых запросов.

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

Elasticsearch: что это такое простыми словами

Elasticsearch — это поисковый и аналитический движок для документов в формате JSON. Данные группируются в индексы, а приложение обращается к ним через API. Движок умеет выполнять полнотекстовый поиск, точные фильтры, агрегации, географические и другие типы запросов.

Запросы «Elasticsearch что это», «Elasticsearch что такое» и «Elasticsearch это» обычно возникают из-за того, что продукт одновременно используют для поиска по сайту, анализа логов и работы с данными. В интернет-магазине нас интересует поисковый сценарий: быстро найти и ранжировать товары в большом каталоге.

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

Как работает Elasticsearch

Индекс и документ

Товар представляют как JSON-документ. Например:

{
  "sku": "CHAIR-184-BLUE",
  "name": "Кресло офисное синее",
  "category_id": 481,
  "brand": "North",
  "price": 18990,
  "in_stock": true,
  "attributes": {
    "material": "ткань",
    "color": "синий"
  }
}

Документы товаров помещают в индекс. Mapping задает типы полей: текст, ключевое значение, число, дата, логический признак. От типа зависит, можно ли поле анализировать как текст, фильтровать точным совпадением или сортировать.

Инвертированный индекс

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

Анализ запроса

Пользователь вводит «синие офисные кресла». Анализатор нормализует запрос согласно настройкам, затем движок ищет совпадающие термы, применяет фильтры и рассчитывает _score. По умолчанию результаты поиска сортируются с учетом релевантности, а фильтры отвечают на бинарный вопрос соответствия: query и filter context.

Elasticsearch: полнотекстовый поиск и точные поля

Одно значение часто индексируют двумя способами. Поле name хранится как text для полнотекстового поиска, а дополнительное name.keyword — как точное значение для сортировки или агрегации. Для бренда, SKU и идентификатора категории обычно важнее тип keyword.

ПолеТипичный типЗачем
Названиеtext и подполе keywordпоиск и точная сортировка
SKUkeywordточное совпадение
Описаниеtextполнотекстовый поиск с меньшим весом
Ценачисловойдиапазон и сортировка
Наличиеbooleanфильтр
Категорияkeywordфильтр и агрегация
Характеристикиявная схема или нормализованный массивфасеты и поиск по значениям

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

Анализаторы и русский язык

Анализатор состоит из правил обработки символов, токенизатора и фильтров токенов. Он может привести текст к нижнему регистру, убрать стоп-слова или нормализовать словоформы. Elastic рекомендует в большинстве случаев применять совместимые анализаторы при индексации и поиске, чтобы термы имели одинаковую форму: index и search analysis.

Для каталога проверьте:

  • поиск разных словоформ;
  • смешение кириллицы и латиницы в брендах;
  • дефисы и пробелы в артикулах;
  • единицы измерения;
  • транслитерацию;
  • опечатки;
  • синонимы и профессиональные названия.

Один анализатор не обязан одинаково обрабатывать название, SKU и описание. Артикул лучше искать точным полем и отдельной нормализованной версией, а естественный текст — анализировать.

Релевантность поиска товаров

Elasticsearch рассчитывает оценку совпадения, но бизнес должен задать приоритеты. Точное совпадение названия обычно важнее слова в длинном описании, товар в наличии — полезнее недоступного, а популярность не должна полностью вытеснять соответствие запросу.

Базовый порядок настройки:

  1. повысить вес точного SKU;
  2. дать высокий вес названию и бренду;
  3. добавить характеристики и категорию;
  4. снизить влияние длинного описания;
  5. учесть наличие и доступность региона;
  6. осторожно добавить продажи, маржу или рейтинг как бизнес-сигналы.

Не меняйте веса по одному удачному запросу. Соберите набор из частотных, редких, брендовых, артикульных и проблемных фраз. Для каждого отметьте ожидаемые товары в верхней выдаче. Elasticsearch предоставляет rank evaluation API для проверки ранжирования на размеченном наборе запросов: оценка качества поиска.

Фильтры и фасеты

После полнотекстового запроса покупатель ограничивает выдачу брендом, ценой, цветом или размером. Фильтры не должны влиять на текстовый _score, если их задача — только включить или исключить документ. Для количества товаров по значениям применяют агрегации.

Поля фасетов требуют чистых данных. Если в каталоге одновременно записаны «10 кг», «10кг» и «10000 г», поисковый движок не обязан понимать, что это одно значение. Нормализацию лучше выполнять до индексации. Подробная логика таких фильтров разобрана в статье «Фасетный поиск в интернет-магазине».

Автодополнение, опечатки и синонимы

Автодополнение

Для подсказок можно использовать разные подходы, включая prefix-запросы, completion suggester или анализатор с edge n-gram. Не применяйте тот же n-gram-анализатор к поисковому запросу без проверки: общие короткие токены могут создавать лишние совпадения. Документация Elastic отдельно показывает сценарий, когда для автодополнения нужен другой search analyzer: параметр search_analyzer.

Опечатки

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

Синонимы

Синонимы полезны для пар «смартфон — телефон» или профессионального и бытового названия. Они не всегда симметричны. Пользователь, ищущий «чехол для айфона», не должен получать сами телефоны из-за слишком широкого правила.

Elasticsearch API и синхронизация каталога

Elasticsearch API принимает JSON-запросы. Магазин может индексировать документы по одному, пакетно или через очередь. Для крупных обновлений удобна новая версия индекса и alias:

  1. создать индекс products_v2 с новой схемой;
  2. загрузить полный каталог;
  3. проверить количество и контрольные запросы;
  4. переключить alias products с v1 на v2;
  5. сохранить старый индекс на время отката;
  6. удалить его после проверки.

Такая схема уменьшает риск частично обновленной выдачи. Изменения цен и остатков после полной загрузки нужно догнать из журнала событий.

Операция Elasticsearch create index должна выполняться управляемым процессом с версионируемым mapping и settings. Клиенты Elasticsearch Python, JavaScript и Spring Data Elasticsearch упрощают вызовы из приложений, но не отменяют контроль совместимости клиента и сервера.

Elasticsearch, Kibana и Logstash

Elasticsearch хранит и ищет данные. Kibana предоставляет интерфейсы для исследования, визуализации и работы с Elastic Stack. Logstash используется для приема и преобразования потоков данных. Сочетание Elasticsearch, Logstash и Kibana часто называют ELK, хотя современный Elastic Stack включает и другие компоненты.

Запрос «Elasticsearch Logstash Kibana» описывает три разных роли, а не обязательный комплект для любого магазина. Elasticsearch архитектура поиска может состоять из приложения, очереди индексации и кластера без Logstash, если данные уже подготовлены.

Для поиска каталога Logstash не обязателен. Если CMS умеет публиковать подготовленные документы через API или очередь, дополнительный слой может только усложнить систему. Kibana полезна разработчикам для диагностики индекса и запросов, но покупательский интерфейс поиска создается внутри магазина.

Elasticsearch: установка и Docker

Официальная документация предлагает управляемые варианты и self-managed установку. Для локальной разработки Elasticsearch Docker дает быстрый тестовый контур. Elastic публикует отдельные инструкции и контейнерные образы: установка Elasticsearch в Docker.

Elasticsearch Docker Compose удобен, если вместе запускаются несколько компонентов. Но пример для ноутбука нельзя считать готовым production-кластером. Потребуются:

  • постоянные тома данных;
  • ограничение сетевого доступа;
  • TLS и управление паролями;
  • расчет памяти и диска;
  • мониторинг состояния и очередей;
  • snapshots и тест восстановления;
  • политика обновлений;
  • одинаково совместимые версии компонентов Elastic Stack.

Запросы «Elasticsearch download», «Elasticsearch установка» и «как установить Elasticsearch» имеют разные ответы для Docker, пакета ОС, архива или облачного развертывания. Выбирайте инструкции для конкретной версии на официальном сайте, а не копируйте старую команду из статьи.

Elasticsearch настройка включает mapping, анализаторы, безопасность, ресурсы и жизненный цикл индексов. Актуальная Elasticsearch документация должна соответствовать установленной версии; старый пример может использовать уже изменившийся API.

Порт Elasticsearch и доступ

HTTP API традиционно связывают с портом 9200, а межузловое взаимодействие — с отдельным транспортным портом. Не полагайтесь на номер порта как на защиту. Административный API не должен быть доступен покупательскому браузеру.

Запрос «Elasticsearch port» помогает найти значение настройки, но открытие порта в firewall не завершает установку. Сначала ограничьте адрес прослушивания и разрешенные источники, затем настройте проверку подлинности.

Пароли и секреты

Запрос «Elasticsearch set password» относится к управлению учетными данными конкретной версии и типа развертывания. Используйте официальную процедуру, храните секреты вне репозитория и выдавайте приложению минимальные права на нужные индексы.

Мониторинг и эксплуатация

Следите как минимум за:

  • состоянием кластера и распределением шардов;
  • использованием heap и паузами сборщика мусора;
  • задержкой поиска и индексации;
  • свободным диском;
  • очередями и отклоненными запросами;
  • длительностью переиндексации;
  • свежестью цен и остатков;
  • долей поисков без результатов.

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

Elasticsearch: аналоги и сравнение с OpenSearch

OpenSearch и Elasticsearch имеют общую историю, но развиваются как отдельные проекты. Нельзя считать их новейшие версии полностью взаимозаменяемыми. При сравнении OpenSearch vs Elasticsearch проверяйте API, плагины, клиенты, лицензии, управляемые сервисы и процедуру миграции на своей версии.

К аналогам Elasticsearch также относят Apache Solr, Meilisearch, Typesense и коммерческие облачные поисковые платформы. Для магазина важны:

  • качество поиска по русскому каталогу;
  • фасеты и сортировки;
  • время обновления остатков;
  • инструменты оценки релевантности;
  • масштабирование и отказоустойчивость;
  • полная стоимость эксплуатации;
  • компетенции команды.

Если каталог небольшой, а встроенный поиск CMS закрывает контрольные запросы, отдельный кластер может быть лишним. Сначала измерьте проблему.

План внедрения

  1. Соберите поисковые запросы и нулевые результаты текущего сайта.
  2. Определите схему товарного документа и владельцев полей.
  3. Создайте индекс и загрузите тестовый каталог.
  4. Настройте точный SKU, названия, бренды, категории и фильтры.
  5. Подготовьте набор ручной оценки релевантности.
  6. Добавьте автодополнение, синонимы и опечатки после базовой проверки.
  7. Настройте безопасную переиндексацию и инкрементальные обновления.
  8. Проведите нагрузочный тест и подготовьте мониторинг.
  9. Запустите часть трафика и сравните конверсию поиска.

Итог

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

Частые вопросы

Elasticsearch — что это такое?

Elasticsearch — это распределенный поисковый и аналитический движок, который хранит JSON-документы в индексах и предоставляет API для поиска, фильтрации и агрегаций. В интернет-магазине его используют как отдельный поисковый слой над товарным каталогом.

Как работает Elasticsearch?

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

Чем Elasticsearch отличается от базы данных?

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

Можно ли установить Elasticsearch через Docker?

Да. Elastic публикует официальные контейнерные образы и инструкции для Docker. Локальная конфигурация подходит для разработки, а production требует постоянных томов, защиты доступа, резервного копирования, мониторинга и расчета ресурсов.

Какие есть аналоги Elasticsearch?

В зависимости от задачи рассматривают OpenSearch, Solr, Meilisearch, Typesense, облачные поисковые сервисы и встроенный поиск платформы магазина. Сравнивать нужно качество русского поиска, фильтры, масштаб, эксплуатацию и лицензионные условия.