Búsqueda de texto completo FTS5
Cómo Synapse usa SQLite FTS5 para búsqueda de texto completo de memoria sub-milisegundo.
Búsqueda de texto completo FTS5
Synapse usa FTS5 (Full-Text Search 5) para búsqueda de memoria rápida y flexible. Esta página explica cómo funciona y cómo usarlo eficazmente.
¿Qué es FTS5?
FTS5 es una extensión de SQLite (también disponible en PostgreSQL vía extensiones) que proporciona capacidades de búsqueda de texto completo. Esta persona:
- Indexa contenido de texto para búsqueda rápida por palabra clave
- Admite operadores booleanos (AND, OR, NOT)
- Admite coincidencia de frases con comillas
- Admite coincidencia por prefijo con
* - Ordena resultados por relevancia
Synapse usa FTS5 para indexar todo el contenido de memoria, lo que habilita búsqueda sub-milisegundo entre miles de memorias.
Cómo Synapse usa FTS5
Cuando hace POST /memory:
- El contenido de la memoria se almacena en la tabla
memories - El contenido también se inserta en la tabla virtual FTS5
- FTS5 tokeniza e indexa el contenido automáticamente
Cuando hace GET /memory/search?q=...:
- Synapse parsea la consulta usando la sintaxis FTS5
- Ejecuta un
MATCHcontra el índice FTS5 - Filtra por
mind_id(aislamiento de tenant) - Devuelve resultados ordenados por relevancia
Sintaxis de consulta
Búsqueda simple por palabra clave
?q=dockerDevuelve memorias que contienen "docker".
Múltiples palabras clave (AND implícito)
?q=docker+swarm
?q=docker%20swarmDevuelve memorias que contienen BOTH "docker" AND "swarm".
Coincidencia de frase
?q="docker+swarm"
?q=%22docker%20swarm%22Devuelve memorias que contienen la frase exacta "docker swarm".
Coincidencia por prefijo
?q=docker*Devuelve memorias que contienen palabras que comienzan por "docker" (p. ej. "dockers", "dockerfile", "dockerize").
OR booleano
?q=docker+OR+kubernetesDevuelve memorias que contienen "docker" OR "kubernetes".
NOT booleano
?q=docker+-swarm
?q=docker+NOT+swarmDevuelve memorias que contienen "docker" pero NOT "swarm".
Agrupamiento
?q=(docker+OR+kubernetes)+-testDevuelve memorias que contienen "docker" o "kubernetes", pero no "test".
Ejemplos prácticos
Buscar memorias sobre un proyecto
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
"https://synapse.schaefer.zone/memory/search?q=synapse+deployment"Buscar frase exacta
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
"https://synapse.schaefer.zone/memory/search?q=%22docker+swarm%22"Excluir memorias de test
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
"https://synapse.schaefer.zone/memory/search?q=production+-test"Buscar por tecnología
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
"https://synapse.schaefer.zone/memory/search?q=(postgres+OR+sqlite)+-mysql"Ranking
FTS5 ordena los resultados por relevancia usando el algoritmo BM25. Factores:
- Frecuencia del término (con qué frecuencia aparece)
- Frecuencia inversa de documento (términos más raros obtienen mayor ranking)
- Longitud del documento (documentos más cortos con el término suben)
- Peso de columna (title > content)
Los resultados se devuelven en orden de ranking (más relevantes primero).
Rendimiento
| Operación | Latencia |
|---|---|
| Search 100 memories | < 5ms |
| Search 1,000 memories | < 10ms |
| Search 10,000 memories | < 25ms |
| Search 100,000 memories | < 100ms |
FTS5 está altamente optimizado para cargas de trabajo con muchas lecturas.
Limitaciones
Stemming
FTS5 no hace stemming por defecto. "running" y "run" son términos diferentes.
Workaround: Use coincidencia por prefijo: ?q=run*
Tolerancia a erratas
FTS5 no admite coincidencia difusa. Una errata no devolverá resultados.
Workaround: Use búsqueda semántica (/memory/semantic-search) para
coincidencia conceptual.
Stop words
Las palabras comunes (the, a, an, is) se indexan pero pueden no ser útiles para la búsqueda. FTS5 lo gestiona automáticamente.
FTS5 vs Búsqueda semántica
| Aspecto | FTS5 | Búsqueda semántica |
|---|---|---|
| Velocidad | Sub-milisegundo | 50-100ms |
| Coincidencia | Palabras clave exactas | Conceptual |
| Tolerancia a erratas | Ninguna | Alguna |
| Stemming | Ninguno | Implícito |
| Requiere embeddings | No | Sí |
| Mejor para | Términos específicos | Conceptos |
Use FTS5 cuando conozca las palabras clave. Use búsqueda semántica cuando quiera "memorias sobre X" donde X se describe de forma diferente.