Skip to main content

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:

  1. Memory-Inhalt wird in der memories-Tabelle gespeichert
  2. Inhalt wird zusätzlich in die FTS5-Virtual-Table eingefügt
  3. FTS5 tokenisiert und indiziert den Inhalt automatisch

Wenn du GET /memory/search?q=... aufrufst:

  1. Synapse parst die Anfrage mit FTS5-Syntax
  2. Führt ein MATCH gegen den FTS5-Index aus
  3. Filtert nach mind_id (Tenant-Isolation)
  4. Liefert bewertete Ergebnisse

Query-Syntax

Einfache Keyword-Suche

?q=docker

Liefert Memories, die „docker" enthalten.

Mehrere Keywords (implizites AND)

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

Liefert Memories, die SOWOHL „docker" ALS AUCH „swarm" enthalten.

Phrase-Matching

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

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

Liefert Memories, die „docker" ODER „kubernetes" enthalten.

Boolesches NOT

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

Liefert Memories, die „docker", aber NICHT „swarm" enthalten.

Gruppierung

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

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

Best Practices

Nächste Schritte