FTS5-Volltextsuche
Wie Synapse SQLite-FTS5 für sub-millisecond Volltext-Memory-Suche nutzt.
FTS5-Volltextsuche
Synapse verwendet FTS5 (Full-Text Search 5) für schnelle, flexible Memory-Suche. Diese Seite erklärt, wie es funktioniert und wie du es effektiv nutzt.
Was ist FTS5?
FTS5 ist eine SQLite-Erweiterung (in PostgreSQL ebenfalls über Erweiterungen verfügbar), die Volltextsuche bietet. Sie:
- Indiziert Textinhalte für schnelle Keyword-Suche
- Unterstützt boolesche Operatoren (AND, OR, NOT)
- Unterstützt Phrase-Matching mit Anführungszeichen
- Unterstützt Präfix-Matching mit
* - Bewertet Ergebnisse nach Relevanz
Synapse nutzt FTS5, um alle Memory-Inhalte zu indizieren — das ermöglicht sub-millisecond Suche über Tausende von Memories.
Wie Synapse FTS5 nutzt
Wenn du POST /memory aufrufst:
- Memory-Inhalt wird in der
memories-Tabelle gespeichert - Inhalt wird zusätzlich in die FTS5-Virtual-Table eingefügt
- FTS5 tokenisiert und indiziert den Inhalt automatisch
Wenn du GET /memory/search?q=... aufrufst:
- Synapse parst die Anfrage mit FTS5-Syntax
- Führt ein
MATCHgegen den FTS5-Index aus - Filtert nach
mind_id(Tenant-Isolation) - Liefert bewertete Ergebnisse
Query-Syntax
Einfache Keyword-Suche
?q=dockerLiefert Memories, die „docker" enthalten.
Mehrere Keywords (implizites AND)
?q=docker+swarm
?q=docker%20swarmLiefert Memories, die SOWOHL „docker" ALS AUCH „swarm" enthalten.
Phrase-Matching
?q="docker+swarm"
?q=%22docker%20swarm%22Liefert Memories, die die exakte Phrase „docker swarm" enthalten.
Präfix-Matching
?q=docker*Liefert Memories mit Wörtern, die mit „docker" beginnen (z. B. „dockers", „dockerfile", „dockerize").
Boolesches OR
?q=docker+OR+kubernetesLiefert Memories, die „docker" ODER „kubernetes" enthalten.
Boolesches NOT
?q=docker+-swarm
?q=docker+NOT+swarmLiefert Memories, die „docker", aber NICHT „swarm" enthalten.
Gruppierung
?q=(docker+OR+kubernetes)+-testLiefert Memories mit „docker" oder „kubernetes", aber nicht „test".
Praktische Beispiele
Memories zu einem Projekt finden
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
"https://synapse.schaefer.zone/memory/search?q=synapse+deployment"Exakte Phrase finden
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
"https://synapse.schaefer.zone/memory/search?q=%22docker+swarm%22"Test-Memories ausschließen
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
"https://synapse.schaefer.zone/memory/search?q=production+-test"Nach Technologie suchen
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
"https://synapse.schaefer.zone/memory/search?q=(postgres+OR+sqlite)+-mysql"Ranking
FTS5 bewertet Ergebnisse nach Relevanz mit dem BM25-Algorithmus. Faktoren:
- Term-Frequency (wie oft der Begriff vorkommt)
- Inverse Document Frequency (seltenere Begriffe ranken höher)
- Dokumentlänge (kürzere Docs mit dem Begriff ranken höher)
- Spalten-Gewichtung (title > content)
Ergebnisse werden in Reihenfolge des Rankings zurückgegeben (relevanteste zuerst).
Performance
| Operation | Latenz |
|---|---|
| 100 Memories durchsuchen | < 5ms |
| 1.000 Memories durchsuchen | < 10ms |
| 10.000 Memories durchsuchen | < 25ms |
| 100.000 Memories durchsuchen | < 100ms |
FTS5 ist stark für lese-lastige Workloads optimiert.
Einschränkungen
Stemming
FTS5 macht standardmäßig kein Stemming. „running" und „run" sind unterschiedliche Begriffe.
Workaround: Präfix-Matching verwenden: ?q=run*
Tippfehler-Toleranz
FTS5 unterstützt kein Fuzzy-Matching. Ein Tippfehler liefert keine Ergebnisse.
Workaround: Verwende semantische Suche (/memory/semantic-search) für
konzeptionelles Matching.
Stoppwörter
Häufige Wörter (the, a, an, is) werden indiziert, sind aber für die Suche meist nicht nützlich. FTS5 behandelt das automatisch.
FTS5 vs semantische Suche
| Aspekt | FTS5 | Semantische Suche |
|---|---|---|
| Geschwindigkeit | Sub-millisecond | 50-100ms |
| Matching | Exakte Keywords | Konzeptionell |
| Tippfehler-Toleranz | Keine | Etwas |
| Stemming | Keins | Implizit |
| Benötigt Embeddings | Nein | Ja |
| Optimal für | Spezifische Begriffe | Konzepte |
Verwende FTS5, wenn du die Keywords kennst. Verwende semantische Suche, wenn du „Memories über X" suchst und X anders beschrieben wird.