Устанавливайте опубликованный yeti3-search==1.2.3. Сетевые источники и разрешения на индексирование настраиваются в приложении.

Контекстный поиск SDK 1.2.3

search.contextual — единый поиск публичных материалов текущего сайта и сети.

Python API: Document, Index, index.upsert/remove/search. Индекс строится

в памяти из атомарного JSON-снимка; SQLite и миграции не используются.

from yeti3_search import Document, Index
index = Index([Document('https://example.ru/catalog/ring/', 'Серебряное кольцо',
                        'Ручная работа', kind='Товары', code='MR-042')])
index.search('серебряные кольца', site='example.ru', scope='site')
index.search('кольца', site='example.ru', scope='network', context='украшения')

Пайплайн опирается на подход Artopt filter_server/search.js: нормализация,

русские окончания, основные/дополнительные поля, совпадение всех слов,

приоритет точного названия/артикула, взвешенная релевантность, пагинация.

Новый модуль добавляет исправление раскладки при пустой выдаче, контекстный

приоритет, фильтр раздела, фасеты сайтов и фрагмент около совпадения.

Обработка окончаний эвристическая; это не полный морфологический словарь

и не векторная семантическая модель.

Серверные адаптеры передают только явно разрешённые опубликованные документы.

Удаление и снятие с публикации должны вызывать index.remove(url). URL должен

быть каноническим HTTPS; нельзя передавать личные данные или приватные модели.

Сетевой адаптер собирает публичные sitemap/ссылки без cookies/авторизации,

учитывает robots/noindex, исключает служебные пути, query URL, загрузки и

переходы на чужие origin. Смена snapshot атомарна; при полном отказе предыдущий

индекс сохраняется. Частично недоступные источники отмечаются в status.

Страницы, существующие только после клиентского JS, требуют серверного

публичного адаптера или SSR; приватные рабочие документы не ищутся глобально.

Браузер: search.js, search.css, search.html. Кнопка в шапке, Ctrl/⌘ K, плавная панель

с автофокусом и отдельная страница; два режима, запрос с задержкой 240 мс, отмена устаревших

ответов, доступный фокус, безопасные DOM-сниппеты, загрузка следующей страницы.

Нативные формы /search/ подключены к тому же модулю. Каталожные фильтры имеют

собственные маршруты. JSON /search/live/ и /node/search остаются совместимыми.

Развёртывание и границы покрытия: deployment/contextual-search/README.md.

Версия 1.2.3: BM25 с нормализацией длины, исправление опечаток и перестановок букв,

точный приоритет артикула, исправление раскладки внутри выбранного сайта.

Следующее поколение индекса собирается в фоне; предыдущая выдача остаётся доступна.

Интерфейс наследует шрифт и палитру сайта, поддерживает recent searches, стрелки,

Escape, Ctrl/⌘K, возврат фокуса, мобильный экран и reduced motion.