Пользователь вводит в поиск «наутбук» вместо «ноутбук» или «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 без покупки сторонних решений.
Как настроить нечеткий поиск пошагово?
- Создайте индекс с маппингом полей, где нужен нечеткий поиск.
- Выберите анализатор (стандартный, phonetic при необходимости).
- В запросе используйте
multi_matchсfuzziness: AUTO. - Установите
prefix_length: 2для производительности. - Протестируйте на выборке типичных опечаток.
- Отрегулируйте параметры при необходимости.
Что входит в работу
- Анализ типичных опечаток и паттернов поиска ваших пользователей.
- Настройка маппинга индекса с учетом нечеткого поиска (выбор полей, анализаторов).
- Конфигурация fuzziness, prefix_length, max_expansions под ваши данные.
- Оптимизация производительности (профилирование, настройка шардов).
- Тестирование на реальном наборе запросов, корректировка.
- Документация и передача доступа к индексу.
- Обучение вашей команды работе с нечетким поиском.
Сроки и стоимость
Базовая настройка (fuzziness + параметры) — 1 рабочий день. Если требуется phonetic-анализ или интеграция со смешанной русско-английской базой — ещё 1 день. Стоимость рассчитывается индивидуально. Свяжитесь с нами — оценим ваш проект бесплатно. Получите консультацию прямо сейчас!
Наши сертифицированные специалисты Elastic (5+ лет опыта) реализовали более 20 проектов с нечетким поиском в продакшене. Гарантируем: если результат не устроит — доработаем бесплатно.







