Користувач вводить «ноутбук», а пошук знаходить лише точні збіги — «ноутбук». Варіанти «ноутбуки», «ноут» — порожня видача. Або «телефон самсунг» не показує жодного результату, хоча каталог повний 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. Отримайте консультацію — ми підберемо аналізатори під ваш каталог. Замовте налаштування пошуку, і ваші клієнти знайдуть все за секунду.







