---
title: "Activar la búsqueda semántica"
description: "Búsqueda vectorial opcional: stack nativo pesado, el interruptor VECTOR_SEARCH, niveles de modelo y repliegue a texto completo sin perder servicio."
---

# 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](/docs/concepts/search/).

## Dos interruptores independientes

Conviene distinguir dos niveles: la instalación y el runtime:

1. **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, el `make deps` estándar **no** lo instala (un `node_modules` local queda ~660 MB más ligero) — para trabajar con vectores en local necesitas `make deps-vector`.
2. **Runtime** — la variable `VECTOR_SEARCH`. En la imagen publicada su valor por defecto es `off`.

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

```bash
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](/docs/self-hosting/install/). 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. |

> [!warning] Modelos e5 asimétricos
> 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](/docs/reference/environment-variables/).

## 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.
