BUSSOL · SMARTSEARCH ULTRA

Документация версии 3.3.7

Bussol: Интеллектуальный поиск — полнотекстовый и AI-поиск для интернет-магазина: опечатки, морфология, управление релевантностью, аналитика CTR, голосовой поиск и гибридный поиск товаров по изображению с локальным ANN-индексом
1С-БитриксFULLTEXTSemantic AIANN / LSHpHash + EmbeddingsNatural LanguageCTR / ConversionVoice
Версия 3.3.7 · 20.10.2026 · Copyright by BUSSOL 2026, Alexander Afanasyev, alafanasyev2015@gmail.com
АКТУАЛЬНАЯ СБОРКА

Документация сформирована по фактическому коду 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.6Security 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.2ID модуля изменён на bussol.smartsearchultra; публичные компоненты сохранены под прежними именами для совместимости.
3.3.0–3.3.1Hybrid 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 отдельно не проверяется. При публикации решения системные версии следует указывать в карточке решения в соответствии с фактически поддерживаемым окружением.

Новая установка

  1. Разместите каталог модуля как /local/modules/bussol.smartsearchultra/ (либо в используемом проектом каталоге /bitrix/modules/).
  2. Установите модуль через административную часть Битрикс. Установщик создаст таблицы, зарегистрирует события и агент очистки аналитики, скопирует компоненты и theme-ресурсы.
  3. Откройте Bussol → Интеллектуальный поиск → Настройки и настройте каждый SITE_ID отдельно.
  4. Выберите инфоблоки, поля и свойства. При больших каталогах проверьте FULLTEXT во вкладке «AI и индексы».
  5. Если используются semantic/image embeddings — выберите AI-провайдера и модель до полной переиндексации.
  6. Запустите полную переиндексацию и только после неё проверяйте морфологию, natural-language facets и embeddings.
  7. Разместите bussol:smartsearch в нужном шаблоне сайта; при необходимости создайте отдельную /search/ со bussol:smartsearch.results.

Обновление 3.3.6 → 3.3.7

Замените файлы модуля и очистите кеш Битрикс при необходимости. Версия 3.3.7 меняет только copyright-заголовки, поэтому миграция БД и переиндексация не требуются.

Переход со старого ID bussol.smartsearch

  1. Сделайте резервную копию БД и старого каталога.
  2. Удаляя старый модуль, выберите сохранение данных, чтобы не удалять таблицы b_bussol_smartsearch_*.
  3. Не держите активными одновременно bussol.smartsearch и bussol.smartsearchultra.
  4. Установите новый каталог bussol.smartsearchultra. Обычные b_option-настройки будут перенесены, если новые значения ещё не созданы.
  5. Проверьте сайты, 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_PAGE5–100 результатов на страницу; типовое значение 24.
SHOW_SORTПоказывать selector сортировки.
qПоисковая строка.
scopeID выбранной области/инфоблока.
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. Управление релевантностью и коммерческое ранжирование

Вес отдельных полей

ПолеВес по умолчанию
NAME5.0
PREVIEW_TEXT1.5
DETAIL_TEXT1.0
SEARCHABLE_CONTENT2.0
CODE4.0
XML_ID4.0
PROPERTIES3.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 weight1200
Минимальная similarity0.35
Exact fallback limit2000

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 AIhttps://api.jina.ai/v1/embeddingsjina-embeddings-v5-omni-small (default), v5-omni-nano, v4, jina-clip-v2, v5-text-small, v5-text-nanoText + image у omni/v4/clip; text-only у v5-text.
Coherehttps://api.cohere.com/v2/embedembed-v4.0 (default), embed-multilingual-v3.0, light, english v3/lightText + image согласно каталогу модуля.
OpenAIhttps://api.openai.com/v1/embeddingstext-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 modelImage 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.

SSRF-защита Custom/Legacy

В 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

ПараметрПо умолчанию
Вес pHash0.35
Вес embedding0.65
Минимальная similarity embedding0.35
Legacy embedding timeout10 сек.

Если выбран 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 дней.
Retention180 дней; ежедневный 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

  1. Сначала соберите базовую статистику показов, кликов и заказов.
  2. Настройте детерминированную релевантность и убедитесь, что нулевые запросы не вызваны отсутствующим индексом.
  3. Включите A/B и направьте, например, 50% трафика в вариант LEARNED.
  4. Сравнивайте CTR, conversion rate и выручку CONTROL vs LEARNED.
  5. Увеличивайте learning weight только после статистически осмысленного объёма событий.

15. CSV импорт/экспорт и диагностика релевантности

CSV

Административная форма поддерживает импорт и экспорт с разделителем ;. Доступны режимы Заменить текущие и Добавить к текущим.

ТипФормат
Синонимыterm;synonyms
Rewritefrom;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_bucketLSH buckets локального ANN для text и image.
b_bussol_smartsearch_text_optionБольшие текстовые настройки: синонимы, rewrite, стоп-слова и приоритеты.
b_bussol_smartsearch_facet_valueFacet 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.queryGET/POSTПубличный read-only поиск; Authentication и CSRF сняты намеренно.
...search.imagePOSTПубличный read-only visual search; файл проходит строгую проверку.
...search.suggestionsGET/POSTПубличные history/popular только для текущей серверной identity.
...search.clickPOSTПубличный storefront action, но CSRF обязателен; дополнительно проверяется владелец searchId.
...search.diagnosePOSTСтандартная защита Controller + внутренняя проверка IsAdmin().

Публичные имена компонентов

Несмотря на новый module ID, публичные вызовы остаются bussol:smartsearch и bussol:smartsearch.results, поэтому шаблоны сайта не нужно переименовывать при переходе на Ultra.

17. Безопасность и диагностика

Статус security journal 3.3.7

Для текущего архива сформирован cumulative security-journal.json: status ready_for_submission, открытых находок 0, blocking findings 0; шесть проблем предыдущей проверки отмечены как fixed.

МеханизмРеализация 3.3.7
Админ-настройкиСтраница настроек требует администратора; POST защищён check_bitrix_sessid().
CTR click-actionPOST + Csrf; searchId проверяется на принадлежность USER_ID/подписанному visitor ID.
Анонимная историяVisitor identity выдаётся сервером и подписывается HMAC; cookie HttpOnly/SameSite.
AI SSRFCustom/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 планируйте переиндексацию; для изменений весов и приоритетов переиндексация обычно не требуется.