Полнотекстовый поиск в SQL Server: как мы сделали поиск по 250 000 товаров
Ваш поиск теряет клиентов прямо сейчас
Клиент вводит «дрель аккумуляторная». Ваш каталог на 250 000 товаров выдаёт пустоту. Почему? Он опечатался — написал «акумуляторная». Или поменял слова местами — «аккумуляторная дрель». Всё, клиент ушёл к конкуренту.
Дальше покажу, как мы это чинили на реальном маркетплейсе запчастей спецтехники. Настройка заняла 3 дня. Поиск стал понимать опечатки, словоформы и порядок слов. Вы получите конкретный рецепт на Falcon Space — с кодом процедуры и примерами запросов.
Важно. Плохой поиск убивает конверсию тихо. Клиент не жалуется — он просто уходит. И вы даже не узнаете, что он искал.
Почему LIKE не тянет каталог на 250 000 товаров
Стандартная конструкция WHERE name LIKE '%дрель%' ломается на четырёх вещах:
- Словоформы. Ищет «дрель», но не находит «дрели», «дрелью», «дрелей».
- Опечатки. «Акумуляторная» — ноль результатов.
- Порядок слов. «Аккумуляторная дрель» и «дрель аккумуляторная» — для LIKE это разные запросы.
- Скорость. Индекс не используется. На больших таблицах — тормоза.
В MS SQL Server есть полнотекстовый поиск (Full-Text Search). Он закрывает все четыре проблемы. Мы его и взяли.
Что умеет полнотекстовый поиск в SQL Server
- Находит любые словоформы: дрель, дрели, дрелью, дрельный.
- Игнорирует порядок слов — «дрель аккумуляторная» и «аккумуляторная дрель» дают один результат.
- Ловит опечатки по расстоянию Левенштейна: «акумуляторная» → «аккумуляторная».
- Взвешивает слова: название весит больше, чем описание.
- Пропускает союзы и предлоги.
- Работает быстро на миллионах записей за счёт индекса.
Как настроить полнотекстовый поиск на Falcon Space: 5 шагов
Шаг 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-специалиста. Окупилось за месяц за счёт роста продаж.
Что делать дальше
Хороший поиск — это как хороший продавец. Он понимает с полуслова, не переспрашивает и ведёт к покупке. Плохой — молча теряет клиентов.
Инвестиции в поиск окупаются быстрее, чем в рекламу. Начните с полнотекстового индекса и процедуры на CONTAINSTABLE — это база, которая работает на любом каталоге от 10 000 позиций.
- Шаг 1. Создать концепт проекта
- Шаг 2. Получить оценку бюджета (КП)
- Шаг 3. Заключить договор
- Шаг 4. Создать совместно техническое задание
- Шаг 5. Поэтапная реализация проекта