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







