---
title: "Включение семантического поиска"
description: "Опциональный векторный поиск: тяжёлый нативный стек, переключатель VECTOR_SEARCH, тиры моделей и откат на полнотекстовый поиск без потерь."
---

# Включение семантического поиска

Полнотекстовый поиск (FTS) в Notarium работает **всегда и без настройки**. Семантический (векторный) поиск — опциональная возможность: он даёт гибридное ранжирование по смыслу, но тянет тяжёлый нативный стек (`onnxruntime` + `sqlite-vec`, ~660 МБ на диске) и локальную модель эмбеддингов, которая докачивается при первом включении (~600 МБ на диске и сотни МБ RAM). Поэтому он выключен по умолчанию и включается осознанно. Как поиск устроен под капотом — в разделе [Концепции: поиск](/docs/concepts/search/).

## Два независимых переключателя

Важно различать два уровня — установку и рантайм:

1. **Установка** — присутствует ли нативный векторный стек в `node_modules`. **Docker-образ несёт его всегда**, поэтому в контейнере включение не требует пересборки. При работе из исходников стандартный `make deps` его **не** ставит (локальная установка `node_modules` на ~660 МБ легче) — для локальной векторной работы нужен `make deps-vector`.
2. **Рантайм** — переменная `VECTOR_SEARCH`. В опубликованном образе она по умолчанию `off`.

Для семантики в Docker достаточно включить рантайм-переключатель — стек уже на месте.

## Включение

```bash
docker run -d --name notarium \
  -p 3000:3000 \
  -v notarium-data:/data \
  -e VECTOR_SEARCH=on \
  docouno/notarium:latest
```

(Один том `/data` держит всё состояние — служебную БД, индексы, ваши заметки, артефакты экспорта; то же, что и при обычном запуске, см. [Установка](/docs/self-hosting/install/). Здесь к нему добавлен только `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+ языков, длинный контекст. |

> [!warning] Асимметричные модели e5
> Компактный тир (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 ГБ ценой небольшого замедления. Полный список параметров эмбеддинга — в [Справочнике](/docs/reference/environment-variables/).

## Откат на полнотекстовый поиск

Если `VECTOR_SEARCH=off` или нативный стек по какой-то причине не грузится, поиск **продолжает работать по полному тексту** — без ошибки, результаты выглядят так же. Семантика — это дополнительный канал ранжирования поверх всегда работающего FTS, а не обязательная зависимость. Инстанс без векторов — полностью рабочий инстанс.
