Москва: проверенные б/у ноутбуки с гарантией и проверкой перед оплатой
+7 906 722-94-45

Главная → Статьи → Поиск при опечатках в запросе пользователя

Поиск при опечатках: обработка ошибочного ввода запроса

Обработка опечаток в поисковом запросе: допуск правок, подсказка исправления, сочетание методов и ограничения допуска для коротких и кодовых запросов.

Прямой ответ

Опечатка в запросе — самая частая причина пустой выдачи. Обработка строится из трёх механизмов, которые применяются в разной последовательности.

Допуск правок при поиске. Движок ищет термины, отличающиеся от запроса на заданное число правок, и возвращает документы без участия пользователя.

Подсказка исправления. Интерфейс показывает «Возможно, вы имели в виду: ноутбук», а пользователь подтверждает замену.

Молчаливое исправление. Запрос заменяется исправленным вариантом без подтверждения, а исходная форма отображается для возврата.

Механизм Участие пользователя Риск ложного результата
Допуск правок Не требуется Средний
Подсказка исправления Требуется подтверждение Низкий
Молчаливое исправление Не требуется Высокий

Допуск правок настраивается параметром, выбирающим порог по длине термина:

{
  "query": {
    "match": {
      "title": {"query": "нотбук", "fuzziness": "AUTO", "prefix_length": 2}
    }
  }
}

Подсказка исправления выполняется отдельным запросом по словарю терминов:

{
  "suggest": {
    "did-you-mean": {
      "text": "нотбук",
      "term": {"field": "title", "suggest_mode": "popular", "min_word_length": 4}
    }
  }
}

Режим popular предлагает только термины, встречающиеся чаще исходного, поэтому редкое слово не заменяется более частым с близким написанием.

В PostgreSQL аналогичная задача решается расширением триграммного сопоставления; о настройке — в статье про полнотекстовый поиск в PostgreSQL.

CREATE EXTENSION pg_trgm;
CREATE INDEX idx_title_trgm ON products USING gin (title gin_trgm_ops);

SELECT title, similarity(title, 'нотбук') AS sim
FROM products
WHERE title % 'нотбук'
ORDER BY sim DESC LIMIT 10;

Мера различия — редакционное расстояние; о механике — в статье про fuzzy-поиск и редакционное расстояние.

Когда допуск опечаток вредит

Расширение совпадения увеличивает полноту выдачи и одновременно число нерелевантных результатов. Три случая требуют отключения допуска.

Короткие термины. Для слова из трёх символов одна правка означает треть слова, поэтому совпадения становятся случайными. Минимальная длина термина для допуска обычно четыре символа.

Кодовые поля. Артикул, идентификатор и модель содержат символы, где одна замена означает другой товар. Допуск правок по таким полям приводит к выдаче чужих позиций.

Запрос с точным совпадением. Пользователь, введший полное точное название, ожидает именно этот результат, а расширенная выдача размывает первую позицию. Точное совпадение выполняется первым, а допуск применяется при пустом результате.

Практическая схема обработки:

  1. Выполняется точный запрос.
  2. При пустом либо коротком результате выполняется запрос с допуском правок.
  3. Если расширенный запрос дал результат, отображается подсказка с исходной формой для возврата.
  4. Если и расширенный запрос пуст, применяется подсказка исправления по словарю.

Такая последовательность ограничивает влияние допуска случаями, где точный поиск не сработал, и сохраняет предсказуемость выдачи для корректных запросов.

Отдельный класс ошибок — неверная раскладка клавиатуры. Преобразование по таблице клавиш решает задачу, которую допуск правок не покрывает; о раскладке — в статье про транслитерацию и раскладку.

Практика: настройка обработки опечаток

1. Выполняйте точный запрос первым. Допуск правок применяется при пустом либо коротком результате, а не безусловно.

2. Устанавливайте минимальную длину термина. Короткие слова с допуском правок дают случайные совпадения.

3. Задавайте длину префикса. Исключение правок в первых символах снижает число кандидатов и ускоряет запрос.

4. Исключайте кодовые поля из допуска. Артикул и идентификатор ищутся точным совпадением.

5. Показывайте исходную форму запроса. Пользователь должен видеть, что запрос был изменён, и иметь возможность вернуться.

6. Собирайте запросы без результата. Журнал пустых выдач — источник для пополнения словаря и настройки допуска.

7. Измеряйте влияние на задержку. Запрос с допуском правок выполняется медленнее точного, а два запроса вместо одного удваивают время.

Рекомендации:

  1. Различайте опечатку и неверную раскладку. Механизмы обработки различаются, и допуск правок не покрывает смену раскладки.
  2. Не применяйте молчаливое исправление без подсказки. Замена запроса без отображения исходной формы лишает пользователя контроля над результатом.
  3. Проверяйте выдачу на реальных опечатках. Синтетические примеры не отражают распределение ошибок реальных пользователей.
  4. Учитывайте язык. Порог допуска зависит от длины слов, поэтому настройка для одного языка не переносится на другой без проверки.
  5. Фиксируйте настройку в тестах. Изменение порога меняет выдачу, поэтому проверка результатов входит в набор тестов.

Практический сценарий: нерелевантная выдача по артикулу

Контекст: поиск по артикулу возвращал товары с похожими, но другими артикулами.

  1. Диагностика. Запрос по артикулу «AB-1024» возвращал позиции «AB-1034» и «AB-1025» выше точного совпадения. Поле артикула участвовало в нечётком поиске вместе с заголовком.
  2. Причина. Допуск правок применялся ко всем полям индекса, включая кодовое. Расстояние один для артикула означает другой товар, а не опечатку.
  3. Действия. (а) Исключили поле артикула из нечёткого поиска, оставив точное совпадение; (б) разделили обработку: точный запрос по артикулу выполняется первым, а допуск правок применяется только к текстовым полям; (в) установили минимальную длину термина четыре символа и длину префикса два; (г) добавили отображение исходной формы запроса при расширенной выдаче; (д) собрали журнал запросов без результата и на его основе уточнили настройки.
  4. Результат. Поиск по артикулу возвращает точное совпадение, а допуск правок работает только по текстовым полям.

Вывод: допуск опечаток применяется к текстовым полям и при пустом результате точного поиска. Кодовые поля ищутся точным совпадением, а отображение исходной формы запроса сохраняет контроль пользователя над выдачей.

FAQ

Какой порог допуска правок выбрать? Автоматический по длине термина. Фиксированное значение для коротких слов даёт случайные совпадения.

Что лучше — молчаливое исправление или подсказка? Подсказка, поскольку пользователь подтверждает замену. Молчаливое исправление применяется при высоком риске пустой выдачи и сопровождается отображением исходной формы.

Нужен ли отдельный словарь для подсказок? Используется терминологический словарь индекса с фильтром по частоте, поэтому отдельный словарь требуется только для специальных терминов.

Замедляет ли обработка опечаток поиск? Да, поскольку выполняется обход терминологического словаря либо второй запрос. Условное применение при пустом результате ограничивает влияние.

Источники: Elasticsearch search suggesters, PostgreSQL pg_trgm, Levenshtein distance — ссылки в шапке.