Пользователь вводит «ноутбук», а поиск находит только точные вхождения — «ноутбук». Варианты «ноутбуки», «ноут» — пустая выдача. Или «телефон самсунг» не показывает ни одного результата, хотя каталог полон 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. |
Процесс работы
- Аудит — анализируем текущие настройки и логи поиска за последние 30 дней. Выявляем проблемные запросы.
- Проектирование — подбираем анализаторы под ваш каталог. Для брендов делаем кастомный char_filter с транслитерацией (Samsung ↔ Самсунг).
- Настройка — создаём индекс, настраиваем маппинг, проверяем на тестовых данных.
- Переиндексация — запускаем полную переиндексацию через API или CLI. Старый индекс остаётся активным до завершения.
- Тестирование — прогоняем 50+ запросов из лога ошибок. Сверяем релевантность.
- Мониторинг — после релиза следим за скоростью индексации и качеством выдачи.
Что входит в работу
- Конфигурация анализаторов (стемминг, транслитерация, n-граммы)
- Настройка маппинга индекса под ваш каталог
- Скрипт переиндексации с blue/green-деплоем
- Документация по изменениям и откату
- Гарантия 14 дней — если что-то пошло не так, правим бесплатно
Сроки и стоимость
Срок настройки — от 2 до 5 дней в зависимости от объёма каталога и количества полей. Стоимость рассчитывается индивидуально. Мы работаем на рынке более 8 лет, настроили поиск для 50+ проектов. После нашей настройки вы экономите на ручных правках результатов поиска: типичная экономия — до 20% бюджета на поддержку. Свяжитесь с нами для бесплатного аудита вашей конфигурации Elasticsearch. Получите консультацию — мы подберём анализаторы под ваш каталог. Закажите настройку поиска, и ваши клиенты найдут всё за секунду.







