назад к статьям

Функция для Laravel: понимаем ошибки пользователей

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

Для того, чтобы пользователю было удобно, магазины необходимо хранить у себя в базе, чтобы пользователи могли под единым названием добавлять туда свои скидки, потому что если один человек напишет UNI QLO, второй напишет Уникло, а третий напишет Уни Кло – мы получим три разных магазина, а нужно, чтобы он был один. Ну и, разумеется, корректно записан, как действительно звучит название бренда:

Для решения этой задачи мы написали PHP функцию для Laravel, которая автоматически ищет синонимы и опечатки, вводимые пользователем, и сопоставляет это дело с базой данных, где хранится массив данных о брендах и магазинах. Например, если использовать слово "jack" и все возможные варианты транслитерации, которые указали в словаре:

$dic = [ 'a' =>['а','э'], 'c' =>['ц','к'], 'j' =>['ж','дж'], 'k' =>['к'], 'ck'=>['к'], ];

то на выходе мы получаем:

джaк, жaк, джaцк, жакк, жэкк, джакк, джэкк, жаск, жэск, джаск, джэск, жэк, джэк

Все это используем в Searchable trait, размещая полученные синонимы для каждого бренда в отдельную колонку. Подключаем асинхронный поиск (мы использовали select2) с выводом подсказок.

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

Кому надо – делимся наgithub (as it is).

Написать
нам письмо
info@brcl.ru
Любые вопросы и предложения
107031, г. Москва
Столешников 11
Показать на карте