Skip to main content

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:

  1. El contenido de la memoria se almacena en la tabla memories
  2. El contenido también se inserta en la tabla virtual FTS5
  3. FTS5 tokeniza e indexa el contenido automáticamente

Cuando hace GET /memory/search?q=...:

  1. Synapse parsea la consulta usando la sintaxis FTS5
  2. Ejecuta un MATCH contra el índice FTS5
  3. Filtra por mind_id (aislamiento de tenant)
  4. Devuelve resultados ordenados por relevancia

Sintaxis de consulta

Búsqueda simple por palabra clave

?q=docker

Devuelve memorias que contienen "docker".

Múltiples palabras clave (AND implícito)

?q=docker+swarm
?q=docker%20swarm

Devuelve memorias que contienen BOTH "docker" AND "swarm".

Coincidencia de frase

?q="docker+swarm"
?q=%22docker%20swarm%22

Devuelve 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+kubernetes

Devuelve memorias que contienen "docker" OR "kubernetes".

NOT booleano

?q=docker+-swarm
?q=docker+NOT+swarm

Devuelve memorias que contienen "docker" pero NOT "swarm".

Agrupamiento

?q=(docker+OR+kubernetes)+-test

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

Mejores prácticas

Próximos pasos