«Текстовый поиск» — поиск по каталогу 1С-Битрикс, который понимает, как покупатель называет товар
«Текстовый поиск» (англ. RAG Search) — модуль собственной разработки для интернет-магазинов на 1С-Битрикс. Ставлю и настраиваю под ваш каталог.
Модуль вырос из практики: ювелирному магазину с каталогом в десятки тысяч товаров был нужен поиск, который находит товар по словам покупателей, а не по словам из карточки. Теперь это основной поиск магазина. Он же работает на сайте с совсем другим каталогом — в несколько тысяч товаров. Пример использования
Чем поиск по смыслу отличается от поиска по словам
Обычный поиск ищет по словам: приводит слово к основе, исправляет опечатки, меняет раскладку, подставляет синонимы из словаря. Без этого не обойтись, и в модуле всё это есть. Но покупатель часто описывает товар словами, которых в карточке нет. Поэтому модуль ищет ещё и по смыслу: нейросетевая модель сравнивает смысл запроса со смыслом карточки, а не буквы.
Оба поиска идут одновременно, результаты сводятся в одну выдачу. Реальные запросы ювелирного каталога:
| Запрос покупателя | Что обычно получается при поиске по словам | Что находит модуль |
|---|---|---|
| браслет якорь | ничего: в названии нет «якоря» | браслеты с плетением «Якорь» — слово есть только в характеристике |
| кольца с красным камнем | кольца из красного золота: слово «красный» нашлось, но не там | кольца, где «красный» относится именно к камню (если цвет вставки есть в свойствах) |
| серёжки, колечко | ноль или нужен ручной словарь на каждое слово | серьги, кольца — уменьшительные формы без словаря |
| cthmub ifhbrb | ноль | «серьги шарики» — запрос в неверной раскладке исправлен |
| Серьги 097546_07_01_000_0580 | смесь всех серёг | товар с этим артикулом; артикул находится и по части |
| иконка подвеска | подвески и иконки вперемешку | иконки: из двух типов выбран более узкий |
На другом каталоге — векторной графики — посетители описывают картинку целиком: «на чёрном фоне цветные цветы и птицы», «церковный орнамент», «изображение выступление». Модуль подбирает работы по такому описанию, без настройки словаря под каждую тему.
Если точных совпадений нет, модуль показывает вместо пустой страницы похожие товары — с пометкой, что это не точное совпадение.
Как понять, что вашему сайту это нужно
Проверьте свой поиск за 10 минут. Наберите на сайте:
- Разговорное или уменьшительное название товара — так, как говорят покупатели, а не как написано в карточке.
- Слово из характеристики, которого нет в названии: материал, плетение, вставку, назначение.
- Запрос в неверной раскладке — например, название раздела латиницей.
- Артикул частью или посреди фразы — «серьги 0975…».
- Тип товара плюс признак, например «кольцо с синим камнем». Посмотрите, нет ли в выдаче чужих типов и чужих признаков.
Если два-три запроса из пяти дали ноль или «что-то похожее по буквам», с тем же результатом с поиска уходят и покупатели. Другой признак: в чате спрашивают «у вас есть…?», хотя товар в каталоге есть.
Что умеет модуль
- Тип товара — фильтр, а не подсказка. Набрали «серьги» — колец в выдаче не будет, даже если они близки по смыслу.
- Поиск по выбранным свойствам. В админке отмечаете, какие свойства участвуют в поиске. Обязательные поля (фото, цена) отсекают пустые карточки.
- Синонимы — правилами, а не словарём на каждое слово. Одно правило связывает разные слова, например профессиональное и бытовое название товара; падежи и уменьшительные формы правило учитывает само.
- Переадресации. Запрос можно сразу отправить на нужную страницу вместо выдачи: «кафф» — в раздел каффов, «доставка» — на страницу доставки, название коллекции — на её страницу.
- Сортировка точных совпадений по популярности — по свойству популярности, если оно есть в каталоге.
- История запросов в админке: что искали, сколько нашлось, куда перешли, как глубоко листали. Фильтры по пользователю, сессии и IP, выгрузка одним файлом. По истории видно, чего покупатели не находят и чего не хватает в каталоге.
- Кэширование запросов. Готовая выдача сохраняется и отдаётся повторно: для гостей — одна на всех, для вошедших пользователей — с учётом их групп. Отдельно хранятся смысловые векторы запросов (по умолчанию 30 дней): частый запрос не пересчитывается моделью. Кэш сбрасывается сам, когда меняются настройки или индекс каталога, поэтому устаревшую выдачу посетитель не увидит.
- Защита от перегрузки: очередь запросов и интервал запросов с одного IP.
- Голосовой ввод — в комплекте модуля. Микрофон в поле поиска включается галочками отдельно для компьютера и для телефона. Работает в браузерах с распознаванием речи — Chrome, Яндекс Браузер, Safari на телефоне; где его нет (например, Firefox), кнопки микрофона просто нет.
Вместе с поиском по фото — больше, чем каждый по отдельности
Поиск по фото — отдельный модуль со своей установкой и своими требованиями. Каждый модуль работает сам по себе. Но если на сайте стоят оба, они дополняют друг друга на одной странице поиска:
- Камера в строке поиска. Покупатель загружает фото и видит товары, похожие по виду, в той же выдаче и тем же оформлением, что и поиск по словам.
- Похожие по виду вместо пустой выдачи. «Серьги с красным камнем», когда цвет камня не записан в карточках: словам искать нечего, а модель фото видит цвет и показывает товары, близкие по виду.
- «Похожие на этот товар». Кнопка-камера на плитке каталога открывает страницу товаров, похожих на выбранный.
Чем это отличается от готовых модулей и облачных поисков
- Понимает смысл, а не только буквы. Готовые модули Marketplace в основном ищут по словам; смысловой поиск в них, как правило, не заявлен (примеры — в таблице выше).
- Не нужны сторонние API, ключи и подписки. Нейросеть скачивается один раз при установке и дальше работает на сервере сайта, без обращений к внешним сервисам. Поэтому нет абонентской платы за поиск и лимитов на число запросов.
- Каталог и запросы покупателей не уходят с сервера. Их не видит никакой сторонний сервис.
- Не нужна видеокарта. Модель работает на обычном процессоре сервера; отдельная служба держит её в памяти, чтобы не загружать на каждый запрос.
- Не нужен отдельный поисковый движок вроде Elasticsearch или OpenSearch: индекс хранится в файле базы модуля на сервере сайта.
Замер скорости по журналу модуля на двух рабочих сайтах (время самого поиска на сервере):
| Ювелирный магазин | Каталог графики | |
|---|---|---|
| Каталог | десятки тысяч товаров | несколько тысяч товаров |
| Сервер | выделенный, 16 ядер (AMD Ryzen 9), 192 ГБ памяти; на нём работают ещё несколько сайтов | недорогой выделенный: 2 × Intel Xeon E5-2620 v3 (12 ядер, 2,4 ГГц, процессоры 2014 года), 32 ГБ памяти; на нём тоже работают другие сайты |
| Запросов в замере | 3 303 за месяц | 72 за две недели |
| Обычный запрос (медиана) | 0,16 с | 0,4 с |
| 9 из 10 запросов укладываются в | 0,4 с | 1,6 с |
| Выдача до 50 товаров | 0,05 с | 0,2 с |
Цифры сняты под обычной рабочей нагрузкой, а не на пустом сервере. Скорость зависит от мощности и загрузки сервера сильнее, чем от размера каталога: в замере больший каталог на более сильном сервере искал быстрее. Вместе с загрузкой страницы посетитель обычно видит результаты через секунду после отправки запроса.
Почему сайт не сломается
- Сначала — отдельная тестовая страница. Новый поиск открывается по своему адресу для сотрудников или выбранных групп. Обычный поиск сайта в это время не трогается. Основной поиск переключается, когда сотрудники проверили выдачу.
- Индексация по расписанию, порциями, в фоне. Повторно обрабатываются только изменённые товары.
- Если служба модели не отвечает, модуль запускает модель отдельно для этого запроса — медленнее, но поиск работает. Причина сбоя записывается и видна на странице диагностики.
- Обновления — без переустановки и без потери данных. Настройки, индекс и история запросов сохраняются.
Три ошибки при замене поиска
- Проверять поиск своими запросами. Сотрудники ищут по названиям из карточек — и всё находится. Покупатели пишут иначе, поэтому проверять нужно по истории их реальных запросов, а не по списку, придуманному в офисе.
- Искать по всем полям подряд. Длинные описания и служебные свойства дают шум: товар находится по случайному слову из текста. В поиск включают только свойства, которые описывают товар.
- Чинить каждую жалобу новым синонимом. Словарь разрастается и начинает мешать сам себе. Формы слов и раскладку модуль понимает сам; правила нужны только для действительно разных слов.
Бонус для блога: перелинковка статей
Та же модель подбирает каждой статье блога похожие статьи — для блока «Читайте также». В админке видно, что изменится, и показан граф связей. Ни одна статья не остаётся без входящих ссылок. Ручные ссылки сохраняются, статьи с отметкой «не менять» модуль не трогает. Запись — только по кнопке, с возможностью отката.
Честно об ограничениях
Модуль находит только то, что есть в карточках. Он понимает, как покупатели называют товары, но если цвет вставки или материал нигде не записан, ни слова, ни смысл его не найдут — тут выручает поиск по виду (см. «Вместе с поиском по фото»).
Сложные запросы модуль может понять неточно или не найти. Несколько условий сразу, отрицания («без камня»), размеры, цены и сравнения («подешевле», «побольше») — такие условия надёжнее задавать фильтрами каталога. По истории запросов видно, где поиск не справился, и часть таких случаев закрывается правилом.
Первая индексация большого каталога занимает часы.
Нужен свой сервер. На виртуальном хостинге модуль не работает (подробнее — в требованиях).
Когда модуль — не первое, что нужно:
- в каталоге несколько десятков товаров — покупатель и так найдёт всё в меню;
- в карточках нет нормальных названий и свойств — сначала порядок в данных, иначе искать нечего;
- проект крупный, с собственной командой поиска и рекомендаций — ему подойдут корпоративные платформы.
Требования
| Требование | |
|---|---|
| 1С-Битрикс | Каталог на инфоблоках, ядро с D7. Модуль ставится вручную, без Marketplace, поэтому работает и при истёкшей лицензии |
| PHP | 7.4–8.x с SQLite3 и mbstring |
| Сервер | VPS / VDS или выделенный, Linux x86_64; виртуальный хостинг не подходит |
| Память и диск | Не меньше 3 ГБ свободной оперативной памяти и 3 ГБ на диске для модели |
| Видеокарта | Не нужна |
| Python | 3.10–3.13 — окружение для модели модуль готовит сам |
| Расписание (cron) | Для индексации каталога |
| Служба (systemd) | Держит модель в памяти; без неё поиск работает, но медленнее |
| Шаблон выдачи | Готовые шаблоны модуля или карточки товаров вашего каталога |
| Выход в интернет | Один раз — загрузить модель и пакеты при установке; при закрытом выходе файлы переносятся вручную. Поиску интернет не нужен |
От вас: доступ к админке и к серверу (SSH или панель).
Что входит в услугу
- Аудит поиска — как ищут на сайте сейчас и какие запросы остаются без результата (по статистике поиска и Метрике).
- Установка модуля, модели и службы, первая индексация каталога.
- Настройка под каталог: свойства для поиска, обязательные поля, популярность, синонимы и переадресации по реальным запросам.
- Тестовая страница для сотрудников и сбор замечаний.
- Переключение основного поиска на модуль и оформление выдачи под шаблон сайта.
- По желанию: включение голосового ввода (входит в модуль), перелинковка статей блога. Поиск по фото — отдельный модуль и отдельная услуга.
Сроки и формат. Настройка под ваш проект — пункты 3–5 и своя логика под особенности каталога — оплачивается как услуга. Объём зависит от каталога и шаблона, оценку в часах даю после аудита. Дальше — на выбор: разовая работа или сопровождение (разбор истории запросов, новые правила, обновления).
Что не входит. Обновления модуля до новых версий, новые функции и доработки в стоимость установки и настройки не входят и бесплатно не предоставляются. Они выполняются в рамках сопровождения или по отдельной договорённости. Установленная версия продолжает работать и без обновлений.
Обсудить поиск для вашего сайта — контакты внизу страницы.