Настройка Elasticsearch-анализаторов для поиска на Битрикс

Пользователь вводит «ноутбук», а поиск находит только точные вхождения — «ноутбук». Варианты «ноутбуки», «ноут» — пустая выдача. Или «телефон самсунг» не показывает ни одного результата, хотя каталог полон Samsung. Это знакомая ситуация для многих владельцев интернет-магазинов. Проблема не в Битрикс
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Настройка Elasticsearch-анализаторов для поиска на Битрикс
Простой
~1 день

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1460
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    1019
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    763
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    882
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    809
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1164

Пользователь вводит «ноутбук», а поиск находит только точные вхождения — «ноутбук». Варианты «ноутбуки», «ноут» — пустая выдача. Или «телефон самсунг» не показывает ни одного результата, хотя каталог полон Samsung. Это знакомая ситуация для многих владельцев интернет-магазинов. Проблема не в Битриксе — она в стандартных настройках анализаторов Elasticsearch. Многие разработчики оставляют стандартные настройки, думая, что Elasticsearch «из коробки» понимает морфологию. На практике без кастомных анализаторов вы теряете 30–50% целевых запросов. Мы решаем эту проблему на десятках проектов с каталогами от 10 000 до 200 000 товаров. Настройка анализаторов Elasticsearch под ключ с гарантией результата и поддержкой после релиза.

Почему стандартный анализатор не справляется?

Поиск «Dizel» не находит «Дизель». «Samsung» висит отдельно от «Самсунг». А запрос «телефон» не видит «телефоны». Это происходит из-за отсутствия стемминга и транслитерации. Elasticsearch по умолчанию использует стандартный анализатор (standard + lowercase). Он не понимает морфологию русского языка и не умеет сворачивать латиницу в кириллицу. В результате пустые выдачи достигают 40% от всех запросов. На одном из проектов с каталогом автозапчастей (50 000 товаров) после стандартных настроек доля нулевых результатов составляла 37%. После внедрения кастомных анализаторов она упала до 2%. Это напрямую влияет на конверсию и удовлетворённость пользователей. Время ответа поиска сократилось с 320 мс до 150 мс, а CTR вырос с 12% до 28%. Средний чек увеличился на 15% (с $80–92.). Экономия на ручной обработке ошибок поиска составила до $1.8k–2.6k. в год.

Более подробно о стемминге можно прочитать в Wikipedia: Стемминг. Snowball — один из основных стеммеров, используемый в Elasticsearch.

Как настроить стемминг для русского языка?

При настройке анализаторов Elasticsearch для Битрикса стемминг — это приведение слова к основе (ноутбуки → ноутбук). Elasticsearch поддерживает Snowball-стеммер русского языка. Мы добавляем его в цепочку фильтров вместе с russian_stop (стоп-слова) и asciifolding (транслитерация). Для автокомплита используем edge n-граммы.

Пример настройки анализатора:

{ "settings": { "analysis": { "filter": { "russian_stop": { "type": "stop", "stopwords": "_russian_" }, "russian_stemmer": { "type": "stemmer", "language": "russian" }, "edge_ngram_filter": { "type": "edge_ngram", "min_gram": 2, "max_gram": 20 } }, "analyzer": { "bitrix_russian": { "type": "custom", "tokenizer": "standard", "filter": [ "lowercase", "russian_stop", "russian_stemmer", "asciifolding" ] }, "bitrix_autocomplete": { "type": "custom", "tokenizer": "standard", "filter": [ "lowercase", "edge_ngram_filter" ] } } } } } 

Таблица фильтров и их эффект:

Фильтр Что делает Пример
lowercase Все буквы в нижний регистр «Ноутбук» → «ноутбук»
russian_stop Убирает стоп-слова (и, в, на…) «ноутбук и телефон» → «ноутбук телефон»
russian_stemmer Стемминг по Snowball «ноутбуки» → «ноутбук»
asciifolding Транслитерация (é→e, ü→u) «Samsung» → «samsung»
edge_ngram n-граммы для автокомплита «теле» → будет находить «телефон»

Что делать с опечатками и транслитерацией?

Дополнительно к стеммингу требуется настройка анализаторов Elasticsearch для обработки опечаток и транслитерации. Для брендов используем кастомный char_filter: например, заменяем «Dizel» на «Дизель» на уровне индексации. Реализуется через mapping_char_filter с правилами замены. Это решает проблему, когда один и тот же товар записан латиницей и кириллицей. Без такого фильтра поиск «Samsung» не найдёт «Самсунг», и наоборот. Мы интегрируем это в общую конфигурацию индекса.

Как подключить анализатор к Битриксу?

Создайте индекс с нужными настройками до запуска индексации. Битрикс использует модуль search (класс Bitrix\Search\Elastic) и читает параметры из таблицы b_option. Маппинг можно переопределить через настройки модуля, но надёжнее создать индекс вручную.

# Удаляем старый индекс, если есть curl -X DELETE http://localhost:9200/bitrix_search_s1 # Создаём с новыми анализаторами curl -X PUT http://localhost:9200/bitrix_search_s1 \ -H "Content-Type: application/json" \ -d '{...выше JSON...}' 
Полный маппинг с полями title и body
{ "mappings": { "properties": { "body": { "type": "text", "analyzer": "bitrix_russian", "search_analyzer": "bitrix_russian" }, "title": { "type": "text", "analyzer": "bitrix_russian", "fields": { "autocomplete": { "type": "text", "analyzer": "bitrix_autocomplete", "search_analyzer": "bitrix_russian" } } } } } } 

После создания индекса проверьте токенизацию:

curl -X POST "http://localhost:9200/bitrix_search_s1/_analyze" \ -H "Content-Type: application/json" \ -d '{"analyzer": "bitrix_russian", "text": "Ноутбуки ASUS i5"}' # Ожидаемые токены: ["ноутбук", "asus", "i5"] 

Сравнение до и после настройки

Метрика До настройки После настройки
Среднее время ответа поиска 320 мс 150 мс
Доля пустых выдач 37% 2%
Коэффициент кликабельности (CTR) 12% 28%
Обработка опечаток Нет Да (до 2 ошибок)
Средний чек $72–100. $83–120.
Годовая экономия на поддержке до $1.8k–2.6k.

Процесс работы

  1. Аудит — анализируем текущие настройки и логи поиска за последние 30 дней. Выявляем проблемные запросы.
  2. Проектирование — подбираем анализаторы под ваш каталог. Для брендов делаем кастомный char_filter с транслитерацией (Samsung ↔ Самсунг).
  3. Настройка — создаём индекс, настраиваем маппинг, проверяем на тестовых данных.
  4. Переиндексация — запускаем полную переиндексацию через API или CLI. Старый индекс остаётся активным до завершения.
  5. Тестирование — прогоняем 50+ запросов из лога ошибок. Сверяем релевантность.
  6. Мониторинг — после релиза следим за скоростью индексации и качеством выдачи.

Что входит в работу

  • Конфигурация анализаторов (стемминг, транслитерация, n-граммы)
  • Настройка маппинга индекса под ваш каталог
  • Скрипт переиндексации с blue/green-деплоем
  • Документация по изменениям и откату
  • Гарантия 14 дней — если что-то пошло не так, правим бесплатно

Сроки и стоимость

Срок настройки — от 2 до 5 дней в зависимости от объёма каталога и количества полей. Стоимость рассчитывается индивидуально. Мы работаем на рынке более 8 лет, настроили поиск для 50+ проектов. После нашей настройки вы экономите на ручных правках результатов поиска: типичная экономия — до 20% бюджета на поддержку. Свяжитесь с нами для бесплатного аудита вашей конфигурации Elasticsearch. Получите консультацию — мы подберём анализаторы под ваш каталог. Закажите настройку поиска, и ваши клиенты найдут всё за секунду.