Elasticsearch: налаштування нечіткого пошуку для обробки помилок друку

Користувач вводить у пошук «наутбук» замість «ноутбук» або «javascipt» замість «javascript» — і йде, не знайшовши потрібний товар. Ми вирішуємо цю проблему налаштуванням нечіткого пошуку в Elasticsearch. В основі — метрика редакційної відстані Левенштейна: кількість односимвольних операцій (вставка,

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Elasticsearch: налаштування нечіткого пошуку для обробки помилок друку
Середній
~2-3 дні

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

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1419
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1287
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    983
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1245
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    998

Користувач вводить у пошук «наутбук» замість «ноутбук» або «javascipt» замість «javascript» — і йде, не знайшовши потрібний товар. Ми вирішуємо цю проблему налаштуванням нечіткого пошуку в Elasticsearch. В основі — метрика редакційної відстані Левенштейна: кількість односимвольних операцій (вставка, видалення, заміна, перестановка сусідніх символів), необхідних для перетворення одного рядка в інший. Докладніше — в відстані Левенштейна.

Такі помилки друку — причина до 30% порожніх результатів пошуку у великих інтернет-магазинах. Наші інженери з 5-річним досвідом в Elasticsearch допомагають налаштувати нечіткий пошук під ключ. Ми гарантуємо, що 99% помилок користувачів будуть оброблені коректно, а швидкість пошуку залишиться прийнятною навіть на індексах з мільйонами документів. Замовте безкоштовну консультацію — ми проаналізуємо ваш пошуковий профіль та запропонуємо оптимальні параметри.

Як вибрати fuzziness для вашого проекту?

Головний параметр — fuzziness. Він визначає, скільки помилок допускається. AUTO краще фіксованого fuzziness: 2 у 5 разів за точністю на коротких запитах.

Значення Опис Приклад для запиту "ноутбук" (8 символів)
0 Точний збіг Тільки «ноутбук»
1 1 операція редагування «ноутбук», «ноутбу» (видалення)
2 2 операції «ноутбук», «наутбук» (заміна), «ноубук» (видалення+заміна)
AUTO 0 для довжини 1-2, 1 для 3-5, 2 для 6+ Для «ноутбук» (8) → 2

AUTO — оптимальний вибір у більшості випадків. Примусовий fuzziness: 2 для коротких запитів дає багато хибних збігів.

Чому prefix_length критичний для продуктивності?

Без prefix_length кожен токен індексу стає кандидатом для fuzzy-розширення. Для індексу з 10 млн документів це може призвести до десятків тисяч операцій вводу-виводу. Встановлення prefix_length: 2 скорочує кількість кандидатів у десятки разів. Для бази з технічними термінами (коди, артикули) рекомендуємо збільшити до 3-4.

Приклад fuzzy-запиту

POST /products/_search { "query": { "fuzzy": { "title": { "value": "наутбук", "fuzziness": "AUTO", "prefix_length": 2, "max_expansions": 50, "transpositions": true } } } } 

prefix_length — перші 2 символи мають збігатися точно. Це критичний параметр продуктивності: без нього fuzziness: 2 для однолітерного запиту «а» теоретично збіжиться з величезною кількістю токенів. Встановлюйте мінімум 1–2.

max_expansions — максимальна кількість варіантів, у які розширюється нечіткий запит. За замовчуванням 50 — зазвичай достатньо.

transpositions — дозволити перестановки сусідніх символів (ab → ba). За замовчуванням увімкнено. Відповідає відстані Дамерау-Левенштейна.

Порівняння підходів: fuzzy vs match з fuzziness

Критерій fuzzy-запит match-запит з fuzziness
Аналіз запиту Ні, сире значення Так, токенізація та нормалізація
Застосування До одного поля До кожного токена після аналізу
Граматичні форми Не враховуються Враховуються (стемінг, синоніми)
Рекомендація Для унікальних ідентифікаторів Для користувацьких пошукових рядків

Комбінування точного та нечіткого пошуку

Найкращий патерн — запускати точний і нечіткий пошук паралельно, точні результати мають займати топ видачі:

POST /products/_search { "query": { "bool": { "should": [ { "multi_match": { "query": "наутбук", "fields": ["title^3", "description"], "boost": 2 } }, { "multi_match": { "query": "наутбук", "fields": ["title^3", "description"], "fuzziness": "AUTO", "prefix_length": 2, "boost": 1 } } ] } } } 

Точний збіг з бустом 2 буде вище нечіткого. Документи з точним збігом піднімуться в топ, нечіткі опиняться нижче — але все одно потраплять у видачу.

Наш досвід: кейс інтернет-магазину електроніки

Клієнт — магазин з 500 тис. товарів. Користувачі часто вводили бренди з помилками: «самсунг», «самсун», «сamsung». Ми налаштували нечіткий пошук з fuzziness: AUTO та prefix_length: 2 для полів title, brand, description. Час пошуку зріс на 15%, але частка нульових результатів знизилася з 8% до 0,5%. Додатково встановили phonetic-аналізатор для англійських брендів (Double Metaphone). Економія бюджету на доопрацювання — близько 30% завдяки використанню вбудованих механізмів Elasticsearch без купівлі сторонніх рішень.

Як налаштувати нечіткий пошук покроково?

  1. Створіть індекс з маппінгом полів, де потрібен нечіткий пошук.
  2. Виберіть аналізатор (стандартний, phonetic при необхідності).
  3. У запиті використовуйте multi_match з fuzziness: AUTO.
  4. Встановіть prefix_length: 2 для продуктивності.
  5. Протестуйте на вибірці типових помилок.
  6. Відрегулюйте параметри при необхідності.

Що входить в роботу

  • Аналіз типових помилок друку та патернів пошуку ваших користувачів.
  • Налаштування маппінгу індексу з урахуванням нечіткого пошуку (вибір полів, аналізаторів).
  • Конфігурація fuzziness, prefix_length, max_expansions під ваші дані.
  • Оптимізація продуктивності (профілювання, налаштування шардів).
  • Тестування на реальному наборі запитів, коригування.
  • Документація та передача доступу до індексу.
  • Навчання вашої команди роботі з нечітким пошуком.

Терміни та вартість

Базова налаштування (fuzziness + параметри) — 1 робочий день. Якщо потрібен phonetic-аналіз або інтеграція зі змішаною російсько-англійською базою — ще 1 день. Вартість розраховується індивідуально. Зв'яжіться з нами — оцінимо ваш проект безкоштовно. Отримайте консультацію прямо зараз!

Наші сертифіковані спеціалісти Elastic (5+ років досвіду) реалізували понад 20 проектів з нечітким пошуком у продакшені. Гарантуємо: якщо результат не влаштує — доопрацюємо безкоштовно.