Гибридный поиск
Поиск в Notarium собран из независимых каналов, которые дополняют друг друга. Полнотекстовый (лексический) поиск доступен всегда и без настройки. Семантический поиск по смыслу и учёт связей графа — опциональные слои поверх него. Результаты каналов сливаются в единый рейтинг, а если опциональные слои недоступны — поиск продолжает работать по полному тексту, без ошибки.
Три канала
| Канал | Что делает | Когда работает |
|---|---|---|
| Лексический (FTS/BM25) | Находит точные вхождения слов и фраз, ранжирует по BM25 | Всегда, без настройки |
| Семантический (векторы) | Находит близкое по смыслу, даже без общих слов | Опционально (VECTOR_SEARCH) |
| Граф-буст | Подтягивает соседей найденного по [[wiki-ссылкам]] | Опционально (GRAPH_BOOST), по умолчанию выключен |
Лексический канал — основа: он работает сразу после запуска, ничего доустанавливать не нужно. Семантический добавляет понимание смысла (синонимы, перефразировки), граф-буст — знание о связях.
Как сливаются результаты
Каналы объединяются алгоритмом RRF (Reciprocal Rank Fusion, k=60): каждый канал даёт свой ранжированный список, а RRF складывает их в общий рейтинг по позициям, а не по несопоставимым «сырым» оценкам. Так лексическое совпадение и смысловая близость взвешиваются вместе. Слияние идёт на уровне заметки — по её устойчивому идентификатору.
flowchart LR
q([Запрос]) --> fts[Лексика · FTS/BM25]
q --> vec[Семантика · векторы]
q --> gr[Граф · 1-hop]
fts --> rrf{RRF-слияние}
vec --> rrf
gr --> rrf
rrf --> res([Результаты])
Если семантика недоступна
Семантический слой может быть выключен или недоступен: не включён VECTOR_SEARCH, не установлен векторный стек, не загрузилась модель или вычисление вектора запроса не уложилось в таймаут. В любом из этих случаев запрос обслуживается лексическим каналом — поиск отвечает всегда и не выдаёт ошибку из-за отсутствия семантики.
Векторный поиск тянет тяжёлый нативный стек (~660 МБ на диске) и загружает модель эмбеддингов в память (сотни МБ RAM), поэтому по умолчанию в публичном образе он выключен. Как его включить и какую модель выбрать — в разделе Настройка поиска.
Где вы ищете
- Spotlight / OmniSearch — быстрый ранжированный переход к заметке. Здесь работает полный гибрид: важна релевантность, а не только точное вхождение слова. См. Поиск и Spotlight.
- Фильтр ленты (
?q=в Ленте) — это лексический фильтр по корпусу: он оставляет заметки, где термины действительно встречаются, и складывается с фильтрами по папкам, тегам и датам.
Индекс и его пересборка
Поисковый индекс — производное знание: он строится из файлов и полностью восстановим ресканом. Один индекс на пространство. Смена модели эмбеддингов — это не миграция, а пересборка векторной части с нуля. Первичное построение векторного индекса на большой базе идёт минутами, а то и часами; на это время интерфейс показывает индикатор «Building search index…», а сам поиск остаётся доступным в лексическом режиме.
Смежные темы: Граф знаний — откуда берётся третий канал, Настройка поиска — включение семантики и выбор тира, File-first — почему индекс восстановим.