ЧАСТНЫЙ
РАЗРАБОТЧИК

САЙТЫ И МАГАЗИНЫ
НА 1С-БИТРИКС

ЕСТЬ ЗАДАЧА?

«Текстовый поиск» — поиск по каталогу 1С-Битрикс, который понимает, как покупатель называет товар

«Текстовый поиск» (англ. RAG Search) — модуль собственной разработки для интернет-магазинов на 1С-Битрикс. Ставлю и настраиваю под ваш каталог.

Модуль вырос из практики: ювелирному магазину с каталогом в десятки тысяч товаров был нужен поиск, который находит товар по словам покупателей, а не по словам из карточки. Теперь это основной поиск магазина. Он же работает на сайте с совсем другим каталогом — в несколько тысяч товаров. Пример использования

Схема работы модуля «Текстовый поиск»: запрос проходит поиск по словам и по смыслу, фильтр по типу товара и правила, затем выдача или похожие товары.
Упрощённая схема обработки запроса модулем «Текстовый поиск».

Чем поиск по смыслу отличается от поиска по словам

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

Оба поиска идут одновременно, результаты сводятся в одну выдачу. Реальные запросы ювелирного каталога:

Запрос покупателя Что обычно получается при поиске по словам Что находит модуль
браслет якорь ничего: в названии нет «якоря» браслеты с плетением «Якорь» — слово есть только в характеристике
кольца с красным камнем кольца из красного золота: слово «красный» нашлось, но не там кольца, где «красный» относится именно к камню (если цвет вставки есть в свойствах)
серёжки, колечко ноль или нужен ручной словарь на каждое слово серьги, кольца — уменьшительные формы без словаря
cthmub ifhbrb ноль «серьги шарики» — запрос в неверной раскладке исправлен
Серьги 097546_07_01_000_0580 смесь всех серёг товар с этим артикулом; артикул находится и по части
иконка подвеска подвески и иконки вперемешку иконки: из двух типов выбран более узкий

На другом каталоге — векторной графики — посетители описывают картинку целиком: «на чёрном фоне цветные цветы и птицы», «церковный орнамент», «изображение выступление». Модуль подбирает работы по такому описанию, без настройки словаря под каждую тему.

Если точных совпадений нет, модуль показывает вместо пустой страницы похожие товары — с пометкой, что это не точное совпадение.

Как понять, что вашему сайту это нужно

Проверьте свой поиск за 10 минут. Наберите на сайте:

  1. Разговорное или уменьшительное название товара — так, как говорят покупатели, а не как написано в карточке.
  2. Слово из характеристики, которого нет в названии: материал, плетение, вставку, назначение.
  3. Запрос в неверной раскладке — например, название раздела латиницей.
  4. Артикул частью или посреди фразы — «серьги 0975…».
  5. Тип товара плюс признак, например «кольцо с синим камнем». Посмотрите, нет ли в выдаче чужих типов и чужих признаков.

Если два-три запроса из пяти дали ноль или «что-то похожее по буквам», с тем же результатом с поиска уходят и покупатели. Другой признак: в чате спрашивают «у вас есть…?», хотя товар в каталоге есть.

Что умеет модуль

  • Тип товара — фильтр, а не подсказка. Набрали «серьги» — колец в выдаче не будет, даже если они близки по смыслу.
  • Поиск по выбранным свойствам. В админке отмечаете, какие свойства участвуют в поиске. Обязательные поля (фото, цена) отсекают пустые карточки.
  • Синонимы — правилами, а не словарём на каждое слово. Одно правило связывает разные слова, например профессиональное и бытовое название товара; падежи и уменьшительные формы правило учитывает само.
  • Переадресации. Запрос можно сразу отправить на нужную страницу вместо выдачи: «кафф» — в раздел каффов, «доставка» — на страницу доставки, название коллекции — на её страницу.
  • Сортировка точных совпадений по популярности — по свойству популярности, если оно есть в каталоге.
  • История запросов в админке: что искали, сколько нашлось, куда перешли, как глубоко листали. Фильтры по пользователю, сессии и 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 или панель).

Что входит в услугу

  1. Аудит поиска — как ищут на сайте сейчас и какие запросы остаются без результата (по статистике поиска и Метрике).
  2. Установка модуля, модели и службы, первая индексация каталога.
  3. Настройка под каталог: свойства для поиска, обязательные поля, популярность, синонимы и переадресации по реальным запросам.
  4. Тестовая страница для сотрудников и сбор замечаний.
  5. Переключение основного поиска на модуль и оформление выдачи под шаблон сайта.
  6. По желанию: включение голосового ввода (входит в модуль), перелинковка статей блога. Поиск по фото — отдельный модуль и отдельная услуга.

Сроки и формат. Настройка под ваш проект — пункты 3–5 и своя логика под особенности каталога — оплачивается как услуга. Объём зависит от каталога и шаблона, оценку в часах даю после аудита. Дальше — на выбор: разовая работа или сопровождение (разбор истории запросов, новые правила, обновления).

Что не входит. Обновления модуля до новых версий, новые функции и доработки в стоимость установки и настройки не входят и бесплатно не предоставляются. Они выполняются в рамках сопровождения или по отдельной договорённости. Установленная версия продолжает работать и без обновлений.

Обсудить поиск для вашего сайта — контакты внизу страницы.

ЧТО
ДЕЛАЕМ?

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

01 / МЕССЕНДЖЕРMAXНаписать в MAX 02 / МЕССЕНДЖЕРTelegram@Fomichev 03 / ЭЛЕКТРОННАЯ ПОЧТАПочтаfomandrey@mail.ru