Включение семантического поиска
Полнотекстовый поиск (FTS) в Notarium работает всегда и без настройки. Семантический (векторный) поиск — опциональная возможность: он даёт гибридное ранжирование по смыслу, но тянет тяжёлый нативный стек (onnxruntime + sqlite-vec, ~660 МБ на диске) и локальную модель эмбеддингов, которая докачивается при первом включении (~600 МБ на диске и сотни МБ RAM). Поэтому он выключен по умолчанию и включается осознанно. Как поиск устроен под капотом — в разделе Концепции: поиск.
Два независимых переключателя
Важно различать два уровня — установку и рантайм:
- Установка — присутствует ли нативный векторный стек в
node_modules. Docker-образ несёт его всегда, поэтому в контейнере включение не требует пересборки. При работе из исходников стандартныйmake depsего не ставит (локальная установкаnode_modulesна ~660 МБ легче) — для локальной векторной работы нуженmake deps-vector. - Рантайм — переменная
VECTOR_SEARCH. В опубликованном образе она по умолчаниюoff.
Для семантики в Docker достаточно включить рантайм-переключатель — стек уже на месте.
Включение
docker run -d --name notarium \
-p 3000:3000 \
-v notarium-data:/data \
-e VECTOR_SEARCH=on \
docouno/notarium:latest
(Один том /data держит всё состояние — служебную БД, индексы, ваши заметки, артефакты экспорта; то же, что и при обычном запуске, см. Установка. Здесь к нему добавлен только VECTOR_SEARCH=on.)
При первом включении модель по умолчанию (bge-m3) докачивается (~600 МБ на диске) и держит сотни МБ RAM. Индексация идёт в фоне: полнотекстовый поиск доступен сразу, векторы догоняют.
Тиры моделей
Модель выбирается парой EMBED_MODEL + EMBED_DIMENSIONS (размерность обязана совпадать с моделью) — это рантайм-настройка на одном образе, а не отдельная сборка:
| Тир | Переменные | RAM | Когда |
|---|---|---|---|
| off | VECTOR_SEARCH=off | 0 | Слабая машина или достаточно ключевого поиска. По умолчанию для образа. |
| compact | VECTOR_SEARCH=on, EMBED_MODEL=Xenova/multilingual-e5-small, EMBED_DIMENSIONS=384 | ~120 МБ | Homelab, небольшой VPS. |
| full | VECTOR_SEARCH=on (по умолчанию: bge-m3, 1024) | ~600 МБ | Мощная машина; 100+ языков, длинный контекст. |
Компактный тир (e5) требует префиксов EMBED_QUERY_PREFIX="query: " и EMBED_PASSAGE_PREFIX="passage: " — забыть их — значит тихо потерять качество поиска. Для симметричной bge-m3 префиксы, наоборот, задавать не нужно.
Ресурсы на тесной машине
На хосте без swap с ~6 ГБ RAM первичная индексация bge-m3 может упереться в память. Два рычага: возьмите compact-тир (e5-small) либо задайте EMBED_CPU_MEM_ARENA=off — это удерживает потребление на ~1.9 ГБ ценой небольшого замедления. Полный список параметров эмбеддинга — в Справочнике.
Откат на полнотекстовый поиск
Если VECTOR_SEARCH=off или нативный стек по какой-то причине не грузится, поиск продолжает работать по полному тексту — без ошибки, результаты выглядят так же. Семантика — это дополнительный канал ранжирования поверх всегда работающего FTS, а не обязательная зависимость. Инстанс без векторов — полностью рабочий инстанс.