Как мы сделали кастомный поиск по каталогу из 250 000 товаров с учётом морфологии и опечаток
У вас маркетплейс с каталогом в 250 000 товаров. Клиент ищет «дрель аккумуляторная», а вы показываете результаты только по точному совпадению «дрель аккумуляторная». Если он опечатается — «дрель акумуляторная» — ничего не найдёт. Если напишет «аккумуляторная дрель» — порядок слов другой — тоже пусто. Клиент уходит к конкуренту, у которого поиск умнее.
Мы решали эту задачу для маркетплейса запчастей спецтехники (250 000 позиций). Настройка поиска заняла 3 дня, и теперь поиск понимает опечатки, словоформы (дрель, дрели, дрелей) и нечувствителен к порядку слов. Расскажу, как сделать такой поиск на Falcon Space.
Почему обычный поиск через LIKE — это плохо
Многие самодельные каталоги используют конструкцию WHERE name LIKE '%дрель%'. Проблемы:
- Не работает для разных форм слова (найдёт «дрель», но не «дрели»).
- Не находит при опечатках («акумуляторная»).
- Зависит от порядка слов.
- Медленный при большом количестве записей (не использует индекс).
В MS SQL Server есть полнотекстовый поиск (Full-Text Search), который решает эти проблемы. Мы его и использовали.
Что даёт полнотекстовый поиск
- Поиск по любым формам слова (дрель, дрели, дрелью, дрельный).
- Игнорирование порядка слов — «дрель аккумуляторная» и «аккумуляторная дрель» дают одинаковый результат.
- Поиск по опечаткам (расстояние Левенштейна) — если пользователь ввёл «акумуляторная», найдёт «аккумуляторная».
- Вес ключевых слов — например, слова в названии имеют больший вес, чем в описании.
- Работа с союзами и предлогами — они игнорируются.
- Быстрота даже на миллионах записей (индекс).
Как настроить полнотекстовый поиск в Falcon Space
Шаг 1. Включить полнотекстовую индексацию для таблицы товаров. В административном интерфейсе Falcon Space указываете, какие поля индексировать (например, name, description). Система сама создаёт индекс.
Шаг 2. На странице каталога добавить поисковую строку. Обычное поле ввода и кнопка «Найти».
Шаг 3. Написать SQL-процедуру поиска. Используем функцию CONTAINSTABLE:
CREATE PROCEDURE [app].[search_products]
@keywords nvarchar(100)
AS
BEGIN
SELECT p.product_id, p.name, p.price, p.image, ft.RANK
FROM products p
INNER JOIN CONTAINSTABLE(products, (name, description), @keywords) ft
ON p.product_id = ft.[KEY]
ORDER BY ft.RANK DESC;
END
Шаг 4. Вывести результаты. Такая же сетка товаров, как в каталоге, с пагинацией.
Шаг 5. Протестировать. Вводим «дрель акумуляторна» — находит. Вводим «шуруповерт» — тоже находит.
Дополнительные улучшения
Автодополнение (подсказки при вводе). Пока пользователь печатает, под полем появляется список товаров, начинающихся с этих букв. Реализуется через AJAX-запрос к процедуре, возвращающей 5 самых популярных товаров.
Поиск по артикулу (точное совпадение). Если пользователь ввёл цифры или код (например, «ZX-123»), система сначала ищет точное совпадение по артикулу, потом полнотекстовый.
Выделение найденных слов в результатах. В описании товара слова из поиска выделяются жирным шрифтом.
Результаты на реальном проекте
Маркетплейс запчастей спецтехники (250 000 товаров):
- Количество поисковых запросов без результатов сократилось с 25% до 5%.
- Средняя глубина поиска (количество просмотренных страниц) выросла на 50%.
- Конверсия из поиска в корзину выросла на 18%.
Затраты на настройку: 3 дня работы SQL-специалиста (60 тыс. руб). Окупилось за 1 месяц за счёт роста продаж.
Сколько стоит настройка поиска для вашего каталога
- Если делаете сами — 1 день на изучение документации, 1 день на настройку (бесплатно).
- Если заказываете нам — от 30 до 60 тыс. руб (зависит от числа полей).
- Автодополнение и подсветка — плюс 20 тыс. руб.
Плохой поиск убивает конверсию на маркетплейсе. Хороший поиск — это как хороший продавец. Инвестиции в поиск окупаются быстрее, чем в рекламу.
- Шаг 1. Создать концепт проекта
- Шаг 2. Получить оценку бюджета (КП)
- Шаг 3. Заключить договор
- Шаг 4. Создать совместно техническое задание
- Шаг 5. Поэтапная реализация проекта