Документация сформирована по фактическому коду bussol.smartsearchultra версии 3.3.7. Security journal текущего архива: ready_for_submission, открытых находок — 0.
1. Назначение и модель работы
bussol.smartsearchultra — поисковый модуль для интернет-магазина на 1С-Битрикс. Он объединяет быстрый полнотекстовый поиск, обработку опечаток и словоформ, управляемую релевантность, semantic embeddings, natural-language фильтры, голосовой ввод, поиск по изображению, аналитику и полноценную страницу результатов.
| Возможность | Что делает |
|---|---|
| Текстовый поиск | Индексирует выбранные инфоблоки, поля и свойства; использует FULLTEXT как ускоритель кандидатов и детальное ранжирование SmartSearch. |
| Опечатки, раскладка и словоформы | Формирует варианты запроса, поддерживает пользовательские синонимы, rewrite-правила, stemming и стоп-слова. |
| Hybrid semantic text search | Объединяет lexical/FULLTEXT-кандидатов с text embeddings и cosine similarity. |
| Естественный язык | Извлекает из фразы ограничения по цене, наличию, бренду и значениям индексируемых свойств. |
| Поиск по изображению | Первый уровень — локальный perceptual hash; второй — image embeddings + локальный ANN/LSH. |
| Голосовой ввод | Использует браузерный SpeechRecognition/webkitSpeechRecognition, если API доступен. |
| Аналитика | Записывает запросы, нулевые результаты, показы, клики, CTR, конверсии и выручку; поддерживает self-learning и A/B. |
| Два интерфейса выдачи | Быстрый dropdown-компонент bussol:smartsearch и отдельная страница bussol:smartsearch.results. |
Запрос сначала нормализуется и преобразуется словарями/NLP. Затем модуль получает кандидатов через FULLTEXT, обычный индекс и при необходимости semantic ANN. После этого применяется детальное ранжирование: совпадения по полям, морфология, semantic score, приоритеты и коммерческие факторы. AI-слой построен как улучшение, а не как обязательная зависимость: при его недоступности обычный поиск продолжает работать.
2. Что нового в версии 3.3.7
Текущая версия определяется файлом install/version.php: 3.3.7, дата сборки 20.10.2026.
| Версия | Изменение |
|---|---|
| 3.3.7 | Во все PHP- и JavaScript-файлы добавлен copyright BUSSOL 2026. Функциональная логика не изменялась; миграция БД и переиндексация не нужны. |
| 3.3.6 | Security hardening: CSRF для click-action, проверка владельца searchId, подписанный HttpOnly visitor ID, SSRF-защита AI endpoint, сокрытие API keys, ограничения изображений. |
| 3.3.5 | Административная иконка заменена на иконку из обновлённого логотипа SmartSearch Ultra. |
| 3.3.4 | В быстрый компонент добавлена кнопка-крестик: появляется при вводе, очищает строку и скрывает текущую выдачу; поздние AJAX-ответы игнорируются. |
| 3.3.3 | Исправлена совместимость visual search после смены module ID; поиск по изображению вынесен в отдельную вкладку настроек. |
| 3.3.2 | ID модуля изменён на bussol.smartsearchultra; публичные компоненты сохранены под прежними именами для совместимости. |
| 3.3.0–3.3.1 | Hybrid semantic text search, natural-language filters, conversion/self-learning/A-B, выбор Jina/Cohere/OpenAI/Custom и моделей. |
Документация ниже описывает именно сборку 3.3.7. Для старых версий 2.x/3.0/3.1 порядок миграции отличается; используйте файлы UPGRADE-* из поставки.
3. Системные требования, установка и обновление
Фактические зависимости сборки 3.3.7
| Компонент | Требование / роль |
|---|---|
Модуль iblock | Обязателен. Установщик прекращает установку, если «Информационные блоки» не установлены. |
| MySQL/MariaDB | Поставка содержит MySQL-схему; FULLTEXT-ускоритель создаётся по SEARCH_TEXT, SEARCH_LATIN, SEARCH_STEMS. |
| PHP GD | Нужен для локального perceptual hash изображений. Без GD ImageHasher не строит pHash. |
Модуль search | Необязателен. При наличии используется Bitrix stemming(); без него работает встроенный fallback морфологии. |
Модуль catalog | Необязателен для самого текста, но нужен для штатного чтения цен, остатков и SKU при коммерческом ранжировании. |
Модуль sale | Необязателен. Если установлен, регистрируется OnSaleOrderSaved и доступна conversion analytics. |
| HTTPS / браузер | Рекомендуется для витрины; голосовой ввод требует доступного браузерного SpeechRecognition и разрешения на микрофон. |
| AI-доступ | Нужен только при embeddings. Встроенные облачные провайдеры используют свои HTTPS endpoint; Custom/Legacy в 3.3.6+ разрешены только как публичный HTTPS endpoint. |
В установщике 3.3.7 минимальная версия ядра Битрикс и PHP отдельно не проверяется. При публикации решения системные версии следует указывать в карточке решения в соответствии с фактически поддерживаемым окружением.
Новая установка
- Разместите каталог модуля как
/local/modules/bussol.smartsearchultra/(либо в используемом проектом каталоге/bitrix/modules/). - Установите модуль через административную часть Битрикс. Установщик создаст таблицы, зарегистрирует события и агент очистки аналитики, скопирует компоненты и theme-ресурсы.
- Откройте
Bussol → Интеллектуальный поиск → Настройкии настройте каждыйSITE_IDотдельно. - Выберите инфоблоки, поля и свойства. При больших каталогах проверьте FULLTEXT во вкладке «AI и индексы».
- Если используются semantic/image embeddings — выберите AI-провайдера и модель до полной переиндексации.
- Запустите полную переиндексацию и только после неё проверяйте морфологию, natural-language facets и embeddings.
- Разместите
bussol:smartsearchв нужном шаблоне сайта; при необходимости создайте отдельную/search/соbussol:smartsearch.results.
Обновление 3.3.6 → 3.3.7
Замените файлы модуля и очистите кеш Битрикс при необходимости. Версия 3.3.7 меняет только copyright-заголовки, поэтому миграция БД и переиндексация не требуются.
Переход со старого ID bussol.smartsearch
- Сделайте резервную копию БД и старого каталога.
- Удаляя старый модуль, выберите сохранение данных, чтобы не удалять таблицы
b_bussol_smartsearch_*. - Не держите активными одновременно
bussol.smartsearchиbussol.smartsearchultra. - Установите новый каталог
bussol.smartsearchultra. Обычныеb_option-настройки будут перенесены, если новые значения ещё не созданы. - Проверьте сайты, AI-настройки и индексы; очистите кеш Битрикс и браузера.
4. Меню, права и многосайтовые настройки
Модуль добавляет собственный пункт в левую административную панель в разделе Bussol. Пункт виден пользователям с правом модуля не ниже R; сама страница настроек 3.3.7 дополнительно проверяет IsAdmin().
| Уровень | Поведение |
|---|---|
| Левая панель | Bussol → Интеллектуальный поиск → Настройки, аналитика и диагностика. |
| Многосайтовость | Для каждого сайта создаётся отдельная верхняя вкладка; конфигурация хранится по SITE_ID. |
| Внутренние вкладки | Основные · Словари · Релевантность · Аналитика · AI и индексы · Интерфейс · Изображения · Обслуживание. |
| Сохранение активной вкладки | Клиентский интерфейс запоминает выбранную внутреннюю вкладку отдельно для каждого сайта через localStorage. |
| Защита формы | Административные POST-действия проходят check_bitrix_sessid(). |
| Вкладка | Основное содержимое |
|---|---|
| Основные | Включение, инфоблоки, поля, свойства, опечатки/раскладка, лимит выдачи, минимальная длина запроса. |
| Словари | Синонимы, rewrite, natural-language, брендовые свойства, CSV, морфология и стоп-слова. |
| Релевантность | Веса полей, приоритеты, диагностика позиции, цена/наличие/популярность. |
| Аналитика | Запросы, CTR, история, «Часто ищут», conversions, self-learning, A/B. |
| AI и индексы | FULLTEXT, semantic text, ANN/LSH, AI provider/model/API key. |
| Интерфейс | Голос, страница результатов, цвета кнопки и рамки поля. |
| Изображения | pHash, image embeddings, legacy endpoint, hybrid image ranking. |
| Обслуживание | Полная переиндексация сайта. |
5. Быстрый компонент `bussol:smartsearch`
Компонент предназначен для поисковой строки в шапке или контентной области сайта. Он выполняет AJAX-поиск с debounce 350 мс, показывает dropdown-выдачу и умеет работать с областью поиска (scope).
<?php
$APPLICATION->IncludeComponent(
'bussol:smartsearch',
'',
[
'SITE_ID' => SITE_ID,
'PLACEHOLDER' => 'Что найти?',
'SHOW_SCOPE' => 'Y',
'CACHE_TIME' => 3600,
]
);| Параметр | Назначение | По умолчанию |
|---|---|---|
SITE_ID | Сайт, конфигурацию которого использует компонент. | Текущий SITE_ID. |
PLACEHOLDER | Текст внутри строки поиска. | Локализованное значение компонента. |
SHOW_SCOPE | Показывать селектор инфоблока/области, если областей больше одной. | Y. |
CACHE_TIME | Стандартный параметр кеша компонента. | 3600. |
Поведение интерфейса
- При вводе текста появляется собственная кнопка-крестик. Клик очищает поле, статус и текущую выдачу; уже отправленный запрос инвалидируется, поэтому поздний AJAX-ответ не открывает список снова.
- При пустом поле и фокусе загружаются «История поиска» и «Часто ищут», если аналитика включена.
- Клик по найденному товару записывает CTR-событие; для state-changing click-action используется Bitrix sessid.
- Если включена полноценная страница результатов, кнопка «Найти» перенаправляет на настроенный URL с параметрами
qиscope. - Цвет фона кнопки, текста и border строки задаются отдельно для каждого сайта через CSS-переменные компонента.
6. Полноценная страница результатов
Компонент bussol:smartsearch.results предназначен для отдельной страницы результатов. Он принимает строку поиска из q, поддерживает пагинацию и серверную сортировку, а клики с карточек также участвуют в CTR/conversion analytics.
<?php
require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/header.php';
$APPLICATION->SetTitle('Поиск');
$APPLICATION->IncludeComponent(
'bussol:smartsearch.results',
'',
[
'SITE_ID' => SITE_ID,
'PER_PAGE' => 24,
'SHOW_SORT' => 'Y',
'CACHE_TIME' => 0,
]
);
require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/footer.php';| Параметр/GET | Назначение |
|---|---|
PER_PAGE | 5–100 результатов на страницу; типовое значение 24. |
SHOW_SORT | Показывать selector сортировки. |
q | Поисковая строка. |
scope | ID выбранной области/инфоблока. |
page | Номер страницы, начиная с 1. |
sort=RELEVANCE | По итоговому SmartSearch score. |
sort=PRICE_ASC / PRICE_DESC | По цене по возрастанию/убыванию. |
sort=POPULARITY | По SHOW_COUNTER. |
sort=STOCK | Сначала товары в наличии. |
Включите «Полноценная страница результатов» и укажите, например, /search/. Тогда submit быстрого компонента переводит пользователя на страницу, а автодополняющая dropdown-выдача продолжает работать во время ввода.
7. Синонимы, rewrite, морфология и стоп-слова
Синонимы
Одна группа задаётся на строку. Связи двунаправленные: любой термин группы расширяет запрос остальными вариантами.
смартфон = телефон, мобильник
ноутбук = laptop, лэптоп
телевизор = tv, телекРучные правила X → Y
Rewrite применяется к точному нормализованному запросу до основного поиска. Используйте правила для маркетинговых названий, жаргона и частых ошибочных форм.
айфон 16 => iphone 16
самсунг а55 => samsung galaxy a55Морфология и стоп-слова
- При включённой морфологии модуль пытается использовать
stemming()модуля «Поиск» Bitrix; если модуль/функция недоступны, применяется встроенный fallback. - Пользовательские стоп-слова можно разделять пробелом, запятой, точкой с запятой или новой строкой.
- После изменения морфологии или стоп-слов нужна полная переиндексация, потому что
SEARCH_STEMSстроится в индексе. - Опция «Исправлять опечатки и раскладку» действует независимо от пользовательских словарей и помогает сформировать дополнительные варианты запроса.
8. Поиск естественным языком
Natural-language parser работает локально и не требует AI. Он отделяет текстовую часть запроса от коммерческих ограничений и facet-значений.
| Что извлекается | Примеры |
|---|---|
| Максимальная цена | до 50000, не дороже 50000, максимум 50000, дешевле 50000. |
| Минимальная цена | от 70000, не дешевле 70000, минимум 70000, дороже 70000. |
| Диапазон цены | от 70000 до 120000. |
| Наличие | в наличии, есть в наличии, на складе, а также отрицательные формы нет в наличии, нет на складе. |
| Бренд/свойства | Значения из facet index по кодам свойств, включая отдельный список брендовых свойств. |
смартфон samsung до 50000 в наличии
ноутбук lenovo от 70000 до 120000
красное платье размер 46Для свойств используется таблица b_bussol_smartsearch_facet_value. В facet index попадают свойства из основной настройки «Символьные коды свойств» и из отдельного списка «Свойства бренда». Значения бренда по умолчанию: BRAND, BRAND_REF, MANUFACTURER.
Если вы добавили цвет, размер, материал, бренд или другое свойство, которое должно извлекаться из естественного языка, выполните полную переиндексацию, чтобы обновить facet index.
9. Управление релевантностью и коммерческое ранжирование
Вес отдельных полей
| Поле | Вес по умолчанию |
|---|---|
| NAME | 5.0 |
| PREVIEW_TEXT | 1.5 |
| DETAIL_TEXT | 1.0 |
| SEARCHABLE_CONTENT | 2.0 |
| CODE | 4.0 |
| XML_ID | 4.0 |
| PROPERTIES | 3.0 |
Вес 0 отключает дополнительный весовой сигнал поля. Допустимый диапазон в конфигурации — 0…50.
Ручные приоритеты
Для инфоблоков, разделов и отдельных элементов используется формат ID=баллы; разрешены положительные и отрицательные значения.
# приоритет инфоблоков
7=500
12=150
# приоритет разделов
25=400
88=-200
# приоритет товаров
1024=1000
2048=500Коммерческие сигналы
| Сигнал | Настройка по умолчанию / поведение |
|---|---|
| Повышение товаров в наличии | stock_boost = 300. |
| Исключение без цены | Выключено по умолчанию. |
| Исключение без остатка | Выключено по умолчанию. |
| Цена | Режим NONE; при включении ASC или DESC максимальный вес 200. |
| Наличие | Дополнительный нормализованный вес 150. |
| Популярность | Вес 100; источник — SHOW_COUNTER, нормализованный среди кандидатов. |
| SKU | При наличии модуля catalog цена и остаток активных предложений агрегируются для родительского товара. |
Администратор может ввести запрос и ID товара и увидеть итоговый score с breakdown: текст, морфология, semantic similarity, веса полей, коммерческие факторы и natural-language constraints. ID = 0 показывает топ-50.
10. FULLTEXT, Hybrid Semantic Search и ANN
FULLTEXT для больших каталогов
FULLTEXT используется как быстрый этап candidate retrieval, а не как финальная релевантность. Индекс создаётся по SEARCH_TEXT, SEARCH_LATIN, SEARCH_STEMS; найденные кандидаты затем проходят обычный SmartSearch scoring.
| Настройка | По умолчанию |
|---|---|
| FULLTEXT включён | Да. |
| Лимит FULLTEXT-кандидатов | 2000 (допустимо 100–10000). |
| Fallback | Если FULLTEXT недоступен/пуст — используется обычный индекс и fuzzy-поиск. |
Hybrid semantic text search
При включении для каждого товара строится TEXT_VECTOR. Пользовательский запрос получает embedding с ролью query; lexical/FULLTEXT и semantic кандидаты объединяются, после чего cosine similarity преобразуется в дополнительный ranking score.
| Параметр | По умолчанию |
|---|---|
| Semantic weight | 1200 |
| Минимальная similarity | 0.35 |
| Exact fallback limit | 2000 |
ANN/vector index
ANN реализован локально через Random Hyperplane LSH и хранит buckets в MySQL, поэтому не требует MySQL VECTOR, pgvector или отдельной vector DB. ANN сначала отбирает небольшое множество кандидатов, затем similarity считается точно.
| Параметр ANN | По умолчанию |
|---|---|
| LSH-таблиц | 6 |
| Бит на таблицу | 12 |
| Кандидатов | 500 |
| Типы пространства | text и image |
Обязательно переиндексируйте после включения semantic search, смены AI-провайдера/модели, изменения параметров ANN или включения image embeddings. Сам SQL FULLTEXT строится по уже существующему индексу и не требует повторной индексации контента.
11. AI-провайдеры и модели
Во вкладке «AI и индексы» выбирается провайдер, после чего интерфейс подставляет endpoint и список моделей. API key вводится отдельно; начиная с security release 3.3.6 сохранённый ключ не выводится обратно в HTML формы.
| Провайдер | Endpoint | Модели из каталога 3.3.7 | Модальности |
|---|---|---|---|
| Jina AI | https://api.jina.ai/v1/embeddings | jina-embeddings-v5-omni-small (default), v5-omni-nano, v4, jina-clip-v2, v5-text-small, v5-text-nano | Text + image у omni/v4/clip; text-only у v5-text. |
| Cohere | https://api.cohere.com/v2/embed | embed-v4.0 (default), embed-multilingual-v3.0, light, english v3/light | Text + image согласно каталогу модуля. |
| OpenAI | https://api.openai.com/v1/embeddings | text-embedding-3-small (default), text-embedding-3-large | Только text embeddings в реализации модуля. |
| Custom / Unified JSON | Задаётся администратором | Произвольный model ID | Зависит от вашего endpoint; интерфейс считает провайдер потенциально text + image. |
| Legacy | Отдельные image endpoint/API key/model во вкладке «Изображения» | Произвольная legacy model | Image only; semantic text не поддерживает. |
Unified JSON contract
{
"task": "embedding",
"input_type": "text",
"model": "your-model",
"input": "поисковый запрос"
}Для изображения используются input_type: "image", base64-поле image и mime_type. Модуль понимает ответы с embedding, vector или data[0].embedding.
В 3.3.6+ произвольный AI endpoint должен быть публичным HTTPS-адресом. Localhost, приватные/reserved IP, userinfo и HTTP redirects блокируются. Это необходимо учитывать при on-prem интеграции: endpoint должен быть доступен как разрешённый публичный HTTPS host.
12. Поиск по изображениям
Visual search включён по умолчанию на чистой установке и имеет два уровня. Первый работает полностью локально; второй включается отдельно и использует AI embeddings.
| Уровень | Механизм |
|---|---|
| 1. Локальный | GD → 64-битный differential perceptual hash (IMAGE_HASH) → Hamming distance / similarity. |
| 2. Семантический | AI image embedding (IMAGE_VECTOR) → ANN/LSH candidate retrieval → точный cosine similarity. |
| Итог | Hybrid score объединяет pHash и embedding; при ошибке AI модуль автоматически остаётся на pHash. |
| Ограничение загрузки | Значение |
|---|---|
| Размер файла | До 10 МБ. |
| Форматы | JPEG, PNG, WebP, GIF. |
| Размеры | Не более 10000×10000 и не более 24 мегапикселей. |
| XHR timeout на витрине | 30 секунд. |
Hybrid image ranking
| Параметр | По умолчанию |
|---|---|
| Вес pHash | 0.35 |
| Вес embedding | 0.65 |
| Минимальная similarity embedding | 0.35 |
| Legacy embedding timeout | 10 сек. |
Если выбран OpenAI, image embedding слой недоступен в текущем ProviderCatalog, поэтому visual search продолжает работать по pHash. Для единой text+image модели используйте Jina, Cohere либо совместимый Custom endpoint.
13. Голосовой ввод и браузеры
Компонент не содержит собственного сервера распознавания речи: он проверяет window.SpeechRecognition || window.webkitSpeechRecognition. Если объект доступен, создаётся recognition с языком из настройки (по умолчанию ru-RU) и максимум тремя альтернативами.
| Ситуация | Поведение компонента |
|---|---|
| API доступен | Кнопка запускает распознавание, показывает статус «Говорите…», помещает transcript в строку и запускает поиск с флагом voice. |
| API отсутствует | Кнопка получает состояние is-unavailable; клик показывает сообщение, что браузер не поддерживает голосовой ввод. |
| Нет разрешения/HTTPS | Компонент сообщает о невозможности запустить микрофон и предлагает проверить HTTPS и browser permission. |
Firefox без SpeechRecognition | В текущей реализации голосовая функция считается недоступной; текстовый и visual search продолжают работать. |
Если голосовой ввод является обязательной функцией проекта, тестируйте целевые браузеры отдельно и не используйте его как единственный способ ввода. Поле поиска всегда остаётся доступным вручную.
14. Аналитика, CTR, conversions, self-learning и A/B
Аналитический слой не участвует в обязательном поисковом пути: при ошибке записи статистики результат поиска всё равно возвращается пользователю.
| Функция | По умолчанию / логика |
|---|---|
| Статистика запросов и CTR | Включена. Записываются query, effective query, source и число результатов. |
| Нулевые результаты | Определяются по RESULT_COUNT = 0 и доступны в административной статистике. |
| Impressions / clicks | Для результатов сохраняются позиция показа и клик; CTR строится по этим таблицам. |
| Период аналитики | 30 дней. |
| Retention | 180 дней; ежедневный CleanupAgent удаляет устаревшие данные. |
| История пользователя | Включена, до 8 запросов. Для авторизованного пользователя используется USER_ID; для анонимного — серверная visitor identity. |
| «Часто ищут» | Включено, до 8 запросов. |
| Conversion analytics | Включена; окно атрибуции 14 дней. Используется при наличии модуля sale. |
| Self-learning ranking | Выключен; при включении вес 700, минимум 20 событий, период 60 дней. |
| A/B | Выключен; эксперимент ranking_v1, 50% трафика в LEARNED при включении. |
Безопасность visitor identity
После исправлений 3.3.6 visitor ID формируется на сервере, подписывается HMAC-SHA256 и хранится в HttpOnly/SameSite cookie. Client-side visitorId больше не используется как доверенная security identity для истории и click ownership.
Рекомендуемый запуск self-learning
- Сначала соберите базовую статистику показов, кликов и заказов.
- Настройте детерминированную релевантность и убедитесь, что нулевые запросы не вызваны отсутствующим индексом.
- Включите A/B и направьте, например, 50% трафика в вариант LEARNED.
- Сравнивайте CTR, conversion rate и выручку CONTROL vs LEARNED.
- Увеличивайте learning weight только после статистически осмысленного объёма событий.
15. CSV импорт/экспорт и диагностика релевантности
CSV
Административная форма поддерживает импорт и экспорт с разделителем ;. Доступны режимы Заменить текущие и Добавить к текущим.
| Тип | Формат |
|---|---|
| Синонимы | term;synonyms |
| Rewrite | from;to |
| Приоритеты | entity_type;entity_id;score, где entity_type = iblock, section или product. |
Диагностика релевантности
Action diagnose предназначен только для администратора. В настройках можно указать запрос и ID элемента. Если ID = 0, интерфейс показывает первые 50 результатов.
- Эффективный запрос после rewrite/NLP.
- Число кандидатов и источник candidate retrieval.
- Итоговый score.
- Вклад текста, морфологии, semantic similarity, отдельных полей и business ranking.
- Natural-language constraints и ANN hits, когда они применимы.
После изменения весов не переиндексируйте сразу: веса и приоритеты применяются во время поиска. Сначала используйте диагностику на 10–20 эталонных запросах. Переиндексация нужна только если меняется индексируемое содержимое, словоформы/facets или vectors.
16. Архитектура, хранение данных и API
Основные таблицы
| Таблица | Назначение |
|---|---|
b_bussol_smartsearch_index | Основной поисковый индекс: text/latin/compact/stems, FIELD_DATA, TEXT_VECTOR, IMAGE_HASH, IMAGE_VECTOR. |
b_bussol_smartsearch_ann_bucket | LSH buckets локального ANN для text и image. |
b_bussol_smartsearch_text_option | Большие текстовые настройки: синонимы, rewrite, стоп-слова и приоритеты. |
b_bussol_smartsearch_facet_value | Facet index для natural-language брендов/свойств. |
b_bussol_smartsearch_query_stat | Запросы, effective query, result count, experiment/variant. |
b_bussol_smartsearch_impression | Показы результатов и позиции. |
b_bussol_smartsearch_click | Клики по результатам. |
b_bussol_smartsearch_conversion | Атрибутированные заказы, количество и выручка. |
Префикс таблиц намеренно остался b_bussol_smartsearch_* после смены module ID — это сохраняет индекс и аналитику при миграции с bussol.smartsearch.
События и обслуживание
| Механизм | Что происходит |
|---|---|
OnAfterIBlockElementAdd/Update | Изменённый элемент индексируется повторно. |
OnAfterIBlockElementDelete | Запись элемента удаляется из поискового индекса. |
OnSaleOrderSaved | При наличии sale регистрируется conversion attribution. |
CleanupAgent::run() | Ежедневно обслуживает retention аналитики. |
| Полная переиндексация | Запускается из настроек сайта агентом и перестраивает text/facets/vectors/ANN. |
Engine actions
| Action | Метод | Доступ/защита |
|---|---|---|
bussol:smartsearchultra.search.query | GET/POST | Публичный read-only поиск; Authentication и CSRF сняты намеренно. |
...search.image | POST | Публичный read-only visual search; файл проходит строгую проверку. |
...search.suggestions | GET/POST | Публичные history/popular только для текущей серверной identity. |
...search.click | POST | Публичный storefront action, но CSRF обязателен; дополнительно проверяется владелец searchId. |
...search.diagnose | POST | Стандартная защита Controller + внутренняя проверка IsAdmin(). |
Публичные имена компонентов
Несмотря на новый module ID, публичные вызовы остаются bussol:smartsearch и bussol:smartsearch.results, поэтому шаблоны сайта не нужно переименовывать при переходе на Ultra.
17. Безопасность и диагностика
Для текущего архива сформирован cumulative security-journal.json: status ready_for_submission, открытых находок 0, blocking findings 0; шесть проблем предыдущей проверки отмечены как fixed.
| Механизм | Реализация 3.3.7 |
|---|---|
| Админ-настройки | Страница настроек требует администратора; POST защищён check_bitrix_sessid(). |
| CTR click-action | POST + Csrf; searchId проверяется на принадлежность USER_ID/подписанному visitor ID. |
| Анонимная история | Visitor identity выдаётся сервером и подписывается HMAC; cookie HttpOnly/SameSite. |
| AI SSRF | Custom/Legacy endpoint — только публичный HTTPS, без redirects; private/reserved адреса блокируются. |
| API keys | Сохранённые ключи не рендерятся обратно в value поля административной формы. |
| Изображения | 10 МБ; JPEG/PNG/WebP/GIF; 24 МП; ограничения размеров применяются до тяжёлого декодирования. |
| URL результатов | Допускаются локальные URL либо http/https; опасные схемы отбрасываются. |
| Удаление модуля | Дополнительная проверка администратора и Bitrix sessid. |
Диагностика типовых проблем
| Симптом | Что проверить |
|---|---|
| «Поиск временно недоступен» | Console/Network; action должен быть bussol:smartsearchultra.search.query; кеш старого JS; зарегистрирован ли новый module ID. |
| Нет результатов после обновления | Выбранные инфоблоки/поля/свойства; выполнена ли полная переиндексация; не включены ли исключения без цены/остатка. |
| FULLTEXT не используется | Статус индекса во вкладке «AI и индексы»; создайте FULLTEXT отдельной кнопкой. При ошибке модуль автоматически использует обычный индекс. |
| Semantic search не работает | Провайдер, API key, модель с text capability, исходящий HTTPS, наличие TEXT_VECTOR; после смены модели нужна переиндексация. |
| Поиск по изображению ничего не находит | GD и IMAGE_HASH; при embeddings — provider image capability, IMAGE_VECTOR, ANN; формат/размер загруженной картинки. |
| Голос не активен | Наличие SpeechRecognition/webkitSpeechRecognition, HTTPS и разрешение на микрофон. |
| Нет conversions | Установлен ли sale, включена analytics/conversion analytics, есть ли click перед заказом, не вышло ли окно атрибуции. |
| Нет истории/«Часто ищут» | Включена ли аналитика и соответствующие переключатели; для анонимного браузера должна создаться серверная visitor cookie. |
18. Чек-лист запуска
- Сделана резервная копия БД и каталога модуля перед установкой/обновлением.
- В Bitrix зарегистрирован именно module ID
bussol.smartsearchultra; старыйbussol.smartsearchне активен одновременно. - Для каждого
SITE_IDвыбраны нужные инфоблоки, поля и свойства. - Проверены синонимы, rewrite, стоп-слова и natural-language свойства.
- На большом каталоге проверен/создан FULLTEXT; candidate limit соответствует размеру каталога.
- Если нужны embeddings, выбран AI provider/model, задан API key и выполнена полная переиндексация.
- Если нужен visual search, проверен GD, заполнены
IMAGE_HASH; для AI image search заполненыIMAGE_VECTORи ANN. - Быстрый компонент установлен в шаблон; кнопка очистки, scope, suggestions и переход на страницу результатов работают.
- На
/search/проверены пагинация и все сортировки. - Голосовой ввод протестирован в целевых браузерах; отсутствие Web Speech API не блокирует обычный поиск.
- Аналитика собирает запросы, impressions и clicks; zero-results используются для улучшения словарей.
- Conversion analytics проверена тестовым заказом, если установлен
sale. - Self-learning включается только после накопления событий; для первого запуска рекомендуется A/B CONTROL vs LEARNED.
- Проверен security-journal текущего архива; для 3.3.7 статус —
ready_for_submission, открытых находок 0. - После всех изменений очищен кеш Битрикс и браузера и выполнен контрольный набор поисковых сценариев.
После выполнения чек-листа модуль готов к рабочему использованию. Для изменений индекса, AI-модели, morphology/facets или image embeddings планируйте переиндексацию; для изменений весов и приоритетов переиндексация обычно не требуется.