Умный поиск

Поиск с исправлением опечаток: как устроен нечёткий поиск

Как поиск находит товар при пропущенной букве, перепутанных символах и наборе в чужой раскладке — и почему автоисправление иногда вредит.

Филимонов Иван3 мин чтения
Пальцы над подсвеченной клавиатурой в темноте
Фото: Michael Marais / Unsplash

Покупатель пишет «перфаратор», «шруповерт» и «,jkufhrf». Всё это — запросы, по которым у вас есть товар, и все они заканчиваются пустой страницей, если поиск ищет точное вхождение. Разбираем, как устроено исправление опечаток и где оно вредит.

Четыре разных явления

Их часто валят в одну кучу, а обрабатываются они по-разному.

Опечатка. Пропущенная, лишняя, переставленная или неверная буква: «перфаратор», «шуруповет», «болгрка». Решается сравнением на расстояние: слово считается совпавшим, если отличается от словарного на одну-две операции.

Чужая раскладка. «,jkufhrf» — это «болгарка», набранная латиницей. Решается не поиском, а преобразованием: по таблице соответствия клавиш строка переводится в другую раскладку и ищется заново.

Транслитерация. «bolgarka» — то же слово, записанное латиницей осознанно. Решается отдельной таблицей: «sh» → «ш», «ch» → «ч» и так далее.

Словоформа. «болгарки», «болгаркой» — не ошибка вовсе, а другой падеж. Решается морфологией: приведением к начальной форме и слова из запроса, и слов из карточки.

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

Сколько ошибок прощать

Терпимость должна зависеть от длины слова:

Длина слова Допустимо ошибок
до 4 букв 0
5–7 букв 1
8 и более 2

Причина в том, что на коротких словах одна допущенная ошибка превращает запрос в другой запрос. «Дом» отличается от «том», «ком» и «сом» ровно на одну букву — и все они существуют. Прощая ошибку в трёхбуквенном слове, вы не исправляете опечатку, а подменяете запрос.

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

Где исправление опечаток вредит

Артикулы

Здесь различие в один символ — это другой товар. «УШМ-125-1200» и «УШМ-125-1400» отличаются одной цифрой и представляют разные модели.

Правильная последовательность: сначала точный поиск по артикулу; нечёткое совпадение допускается только если точного не нашлось, и результат при этом стоит пометить как приблизительный.

Числа в характеристиках

«230» и «330» — не опечатка друг друга, а два разных диаметра. Числовые токены из нечёткого сравнения лучше исключать вовсе.

Бренды

«Makita» и «Makute» — существующие разные бренды, второй из которых часто ищут как подделку первого. Автоматическое «исправление» одного в другой создаст претензии, а не продажи.

Что показывать покупателю

Исправление должно быть видимым, а не молчаливым. Два рабочих варианта:

  • «Показаны результаты по запросу „болгарка“. Искать „болгрка“» — когда система уверена в исправлении.
  • «Возможно, вы имели в виду: болгарка» — когда не уверена, и выдача остаётся по исходному запросу.

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

Как проверить свой поиск

Составьте список из двадцати запросов и прогоните вручную:

  1. Пять ходовых товаров с одной опечаткой в каждом.
  2. Три запроса в чужой раскладке.
  3. Три запроса латиницей-транслитом.
  4. Три запроса в косвенном падеже.
  5. Три артикула с пробелом вместо дефиса.
  6. Три коротких запроса из трёх-четырёх букв — проверить, что их не «исправили» в чужие товары.

Последний пункт проверяют реже всего, а именно он ловит слишком щедрую настройку.

Коротко

  • Опечатка, чужая раскладка, транслит и словоформа — четыре разные задачи, решаются по-разному.
  • Терпимость к ошибкам должна расти с длиной слова; на коротких словах она вредна.
  • В артикулах и числах нечёткое сравнение нужно ограничивать: там один символ меняет товар.
  • Исправление показывают покупателю явно, а не подменяют запрос молча.
  • Проверять поиск нужно на списке из реальных ошибочных формулировок, включая короткие слова.

Вопросы по теме статьи

Что делать, если покупатель набрал запрос в английской раскладке?

Распознать это и переложить обратно. Строка «,jnbyrb» — это «ботинки», набранное не в той раскладке; преобразование выполняется по таблице соответствия клавиш и занимает доли миллисекунды.

Сколько ошибок в слове поиск должен прощать?

Обычно одну-две в зависимости от длины слова. Слишком большая терпимость вредна: на коротких словах она превращает точный запрос в набор случайных товаров.

Нужно ли исправлять опечатки в артикулах?

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

Умный поиск по каталогу товаров для интернет-магазина

Поиск, который переживает опечатки, чужую раскладку и запрос по характеристикам. Три канала поиска сразу, живые фильтры, менее 50 мс на каталоге 100 000+ товаров.

Читайте дальше