Activar la búsqueda semántica
La búsqueda de texto completo (FTS) en Notarium funciona siempre y sin configuración. La búsqueda semántica (vectorial) es una capacidad opcional: aporta un ranking híbrido por significado, pero arrastra un stack nativo pesado (onnxruntime + sqlite-vec, ~660 MB en disco) y un modelo de embeddings local que se descarga la primera vez que se activa (~600 MB en disco y cientos de MB de RAM). Por eso viene desactivada por defecto y se activa de forma deliberada. Para ver cómo funciona la búsqueda por dentro, consulta Conceptos: búsqueda.
Dos interruptores independientes
Conviene distinguir dos niveles: la instalación y el runtime:
- Instalación — si el stack vectorial nativo está presente en
node_modules. La imagen de Docker lo incluye siempre, así que activarlo dentro del contenedor no requiere reconstruir nada. Al ejecutar desde el código fuente, elmake depsestándar no lo instala (unnode_moduleslocal queda ~660 MB más ligero) — para trabajar con vectores en local necesitasmake deps-vector. - Runtime — la variable
VECTOR_SEARCH. En la imagen publicada su valor por defecto esoff.
Para la búsqueda semántica en Docker basta con activar el interruptor de runtime: el stack ya está en su sitio.
Cómo activarla
docker run -d --name notarium \
-p 3000:3000 \
-v notarium-data:/data \
-e VECTOR_SEARCH=on \
docouno/notarium:latest
(Un único volumen /data guarda todo el estado — la base de datos de metadatos, los índices, tus notas, los artefactos de exportación; lo mismo que en una ejecución normal, consulta Instalación. Aquí solo se le añade VECTOR_SEARCH=on.)
Al activarla por primera vez, el modelo por defecto (bge-m3) se descarga (~600 MB en disco) y ocupa cientos de MB de RAM. La indexación corre en segundo plano: la búsqueda de texto completo está disponible de inmediato, mientras los vectores se ponen al día.
Niveles de modelo
El modelo se elige con la pareja EMBED_MODEL + EMBED_DIMENSIONS (la dimensionalidad tiene que coincidir con el modelo) — es un ajuste de runtime sobre una única imagen, no una compilación aparte:
| Nivel | Variables | RAM | Cuándo |
|---|---|---|---|
| off | VECTOR_SEARCH=off | 0 | Una máquina de pocos recursos, o la búsqueda por palabras clave basta. El valor por defecto de la imagen. |
| compact | VECTOR_SEARCH=on, EMBED_MODEL=Xenova/multilingual-e5-small, EMBED_DIMENSIONS=384 | ~120 MB | Homelab, un VPS pequeño. |
| full | VECTOR_SEARCH=on (por defecto: bge-m3, 1024) | ~600 MB | Una máquina potente; más de 100 idiomas, contexto largo. |
El nivel compact (e5) exige los prefijos EMBED_QUERY_PREFIX="query: " y EMBED_PASSAGE_PREFIX="passage: " — olvidarlos degrada la calidad de la búsqueda en silencio. Para el bge-m3 simétrico ocurre lo contrario: no debes definir los prefijos en absoluto.
Recursos en una máquina ajustada
En un host sin swap y con ~6 GB de RAM, la indexación inicial de bge-m3 puede chocar con el techo de memoria. Dos palancas: usar el nivel compact (e5-small), o definir EMBED_CPU_MEM_ARENA=off — esto mantiene el consumo en torno a ~1,9 GB a cambio de una pequeña ralentización. Para la lista completa de parámetros de embeddings, consulta la Referencia.
Repliegue a la búsqueda de texto completo
Si VECTOR_SEARCH=off, o si el stack nativo no se carga por cualquier motivo, la búsqueda sigue funcionando sobre el texto completo — sin error, y los resultados se ven igual. La búsqueda semántica es un canal de ranking adicional por encima de la FTS, siempre activa, no una dependencia obligatoria. Una instancia sin vectores es una instancia plenamente funcional.