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
Анализ запроса Нет, сырое значение Да, токенизация и нормализация
Применение К одному полю К каждому токену после анализа
Грамматические формы Не учитываются Учитываются (stemming, синонимы)
Рекомендация Для уникальных идентификаторов Для пользовательских поисковых строк

Комбинирование точного и нечёткого поиска

Лучший паттерн — запускать точный и нечёткий поиск параллельно, точные результаты должны занимать топ выдачи:

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 проектов с нечетким поиском в продакшене. Гарантируем: если результат не устроит — доработаем бесплатно.