{"title":"FTS5-Volltextsuche","slug":"fts5-search","category":"concepts","summary":"Wie Synapse SQLite-FTS5 für sub-millisecond Volltext-Memory-Suche nutzt.","audience":["human","llm"],"tags":["concept","search","fts5","fulltext"],"difficulty":"advanced","updated":"2026-06-27","word_count":538,"read_minutes":3,"lang":"de","translated":true,"requested_lang":"de","content_markdown":"\n# FTS5-Volltextsuche\n\nSynapse verwendet FTS5 (Full-Text Search 5) für schnelle, flexible Memory-Suche.\nDiese Seite erklärt, wie es funktioniert und wie du es effektiv nutzt.\n\n## Was ist FTS5?\n\nFTS5 ist eine SQLite-Erweiterung (in PostgreSQL ebenfalls über Erweiterungen\nverfügbar), die Volltextsuche bietet. Sie:\n\n- Indiziert Textinhalte für schnelle Keyword-Suche\n- Unterstützt boolesche Operatoren (AND, OR, NOT)\n- Unterstützt Phrase-Matching mit Anführungszeichen\n- Unterstützt Präfix-Matching mit `*`\n- Bewertet Ergebnisse nach Relevanz\n\nSynapse nutzt FTS5, um alle Memory-Inhalte zu indizieren — das ermöglicht\nsub-millisecond Suche über Tausende von Memories.\n\n## Wie Synapse FTS5 nutzt\n\nWenn du `POST /memory` aufrufst:\n\n1. Memory-Inhalt wird in der `memories`-Tabelle gespeichert\n2. Inhalt wird zusätzlich in die FTS5-Virtual-Table eingefügt\n3. FTS5 tokenisiert und indiziert den Inhalt automatisch\n\nWenn du `GET /memory/search?q=...` aufrufst:\n\n1. Synapse parst die Anfrage mit FTS5-Syntax\n2. Führt ein `MATCH` gegen den FTS5-Index aus\n3. Filtert nach `mind_id` (Tenant-Isolation)\n4. Liefert bewertete Ergebnisse\n\n## Query-Syntax\n\n### Einfache Keyword-Suche\n\n```\n?q=docker\n```\n\nLiefert Memories, die „docker\" enthalten.\n\n### Mehrere Keywords (implizites AND)\n\n```\n?q=docker+swarm\n?q=docker%20swarm\n```\n\nLiefert Memories, die SOWOHL „docker\" ALS AUCH „swarm\" enthalten.\n\n### Phrase-Matching\n\n```\n?q=\"docker+swarm\"\n?q=%22docker%20swarm%22\n```\n\nLiefert Memories, die die exakte Phrase „docker swarm\" enthalten.\n\n### Präfix-Matching\n\n```\n?q=docker*\n```\n\nLiefert Memories mit Wörtern, die mit „docker\" beginnen (z. B. „dockers\",\n„dockerfile\", „dockerize\").\n\n### Boolesches OR\n\n```\n?q=docker+OR+kubernetes\n```\n\nLiefert Memories, die „docker\" ODER „kubernetes\" enthalten.\n\n### Boolesches NOT\n\n```\n?q=docker+-swarm\n?q=docker+NOT+swarm\n```\n\nLiefert Memories, die „docker\", aber NICHT „swarm\" enthalten.\n\n### Gruppierung\n\n```\n?q=(docker+OR+kubernetes)+-test\n```\n\nLiefert Memories mit „docker\" oder „kubernetes\", aber nicht „test\".\n\n## Praktische Beispiele\n\n### Memories zu einem Projekt finden\n\n```bash\ncurl -H \"Authorization: Bearer YOUR_MIND_KEY\" \\\n     \"https://synapse.schaefer.zone/memory/search?q=synapse+deployment\"\n```\n\n### Exakte Phrase finden\n\n```bash\ncurl -H \"Authorization: Bearer YOUR_MIND_KEY\" \\\n     \"https://synapse.schaefer.zone/memory/search?q=%22docker+swarm%22\"\n```\n\n### Test-Memories ausschließen\n\n```bash\ncurl -H \"Authorization: Bearer YOUR_MIND_KEY\" \\\n     \"https://synapse.schaefer.zone/memory/search?q=production+-test\"\n```\n\n### Nach Technologie suchen\n\n```bash\ncurl -H \"Authorization: Bearer YOUR_MIND_KEY\" \\\n     \"https://synapse.schaefer.zone/memory/search?q=(postgres+OR+sqlite)+-mysql\"\n```\n\n## Ranking\n\nFTS5 bewertet Ergebnisse nach Relevanz mit dem BM25-Algorithmus. Faktoren:\n\n- Term-Frequency (wie oft der Begriff vorkommt)\n- Inverse Document Frequency (seltenere Begriffe ranken höher)\n- Dokumentlänge (kürzere Docs mit dem Begriff ranken höher)\n- Spalten-Gewichtung (title > content)\n\nErgebnisse werden in Reihenfolge des Rankings zurückgegeben (relevanteste zuerst).\n\n## Performance\n\n| Operation | Latenz |\n|-----------|--------|\n| 100 Memories durchsuchen | < 5ms |\n| 1.000 Memories durchsuchen | < 10ms |\n| 10.000 Memories durchsuchen | < 25ms |\n| 100.000 Memories durchsuchen | < 100ms |\n\nFTS5 ist stark für lese-lastige Workloads optimiert.\n\n## Einschränkungen\n\n### Stemming\n\nFTS5 macht standardmäßig kein Stemming. „running\" und „run\" sind unterschiedliche\nBegriffe.\n\n**Workaround:** Präfix-Matching verwenden: `?q=run*`\n\n### Tippfehler-Toleranz\n\nFTS5 unterstützt kein Fuzzy-Matching. Ein Tippfehler liefert keine Ergebnisse.\n\n**Workaround:** Verwende semantische Suche (`/memory/semantic-search`) für\nkonzeptionelles Matching.\n\n### Stoppwörter\n\nHäufige Wörter (the, a, an, is) werden indiziert, sind aber für die Suche\nmeist nicht nützlich. FTS5 behandelt das automatisch.\n\n## FTS5 vs semantische Suche\n\n| Aspekt | FTS5 | Semantische Suche |\n|--------|------|-------------------|\n| Geschwindigkeit | Sub-millisecond | 50-100ms |\n| Matching | Exakte Keywords | Konzeptionell |\n| Tippfehler-Toleranz | Keine | Etwas |\n| Stemming | Keins | Implizit |\n| Benötigt Embeddings | Nein | Ja |\n| Optimal für | Spezifische Begriffe | Konzepte |\n\nVerwende FTS5, wenn du die Keywords kennst. Verwende semantische Suche, wenn du\n„Memories über X\" suchst und X anders beschrieben wird.\n\n## Best Practices\n\n> [!TIP]\n> - **Verwende spezifische Begriffe** — „docker swarm\" schlägt „container orchestration\"\n> - **Phrasen in Anführungszeichen** — `\"docker swarm\"` sichert Phrase-Match\n> - **Präfix für Variationen** — `deploy*` erfasst „deploy\", „deployment\", „deploying\"\n> - **Noise ausschließen** — `-test` filtert Test-Memories heraus\n> - **Mit Tags kombinieren** — `?q=docker&tag=production` schränkt Ergebnisse ein\n\n## Nächste Schritte\n\n- [Semantische Suche](/docs/concepts/semantic-search)\n- [Memory-API](/docs/api/memory)\n- [Memory-Best-Practices](/docs/guides/memory-best-practices)\n","content_html":"<h1>FTS5-Volltextsuche</h1>\n<p>Synapse verwendet FTS5 (Full-Text Search 5) für schnelle, flexible Memory-Suche.\nDiese Seite erklärt, wie es funktioniert und wie du es effektiv nutzt.</p>\n<h2>Was ist FTS5?</h2>\n<p>FTS5 ist eine SQLite-Erweiterung (in PostgreSQL ebenfalls über Erweiterungen\nverfügbar), die Volltextsuche bietet. Sie:</p>\n<ul>\n<li>Indiziert Textinhalte für schnelle Keyword-Suche</li>\n<li>Unterstützt boolesche Operatoren (AND, OR, NOT)</li>\n<li>Unterstützt Phrase-Matching mit Anführungszeichen</li>\n<li>Unterstützt Präfix-Matching mit <code>*</code></li>\n<li>Bewertet Ergebnisse nach Relevanz</li>\n</ul>\n<p>Synapse nutzt FTS5, um alle Memory-Inhalte zu indizieren — das ermöglicht\nsub-millisecond Suche über Tausende von Memories.</p>\n<h2>Wie Synapse FTS5 nutzt</h2>\n<p>Wenn du <code>POST /memory</code> aufrufst:</p>\n<ol>\n<li>Memory-Inhalt wird in der <code>memories</code>-Tabelle gespeichert</li>\n<li>Inhalt wird zusätzlich in die FTS5-Virtual-Table eingefügt</li>\n<li>FTS5 tokenisiert und indiziert den Inhalt automatisch</li>\n</ol>\n<p>Wenn du <code>GET /memory/search?q=...</code> aufrufst:</p>\n<ol>\n<li>Synapse parst die Anfrage mit FTS5-Syntax</li>\n<li>Führt ein <code>MATCH</code> gegen den FTS5-Index aus</li>\n<li>Filtert nach <code>mind_id</code> (Tenant-Isolation)</li>\n<li>Liefert bewertete Ergebnisse</li>\n</ol>\n<h2>Query-Syntax</h2>\n<h3>Einfache Keyword-Suche</h3>\n<pre><code class=\"hljs language-plaintext\">?q=docker</code></pre><p>Liefert Memories, die „docker&quot; enthalten.</p>\n<h3>Mehrere Keywords (implizites AND)</h3>\n<pre><code class=\"hljs language-plaintext\">?q=docker+swarm\n?q=docker%20swarm</code></pre><p>Liefert Memories, die SOWOHL „docker&quot; ALS AUCH „swarm&quot; enthalten.</p>\n<h3>Phrase-Matching</h3>\n<pre><code class=\"hljs language-plaintext\">?q=&quot;docker+swarm&quot;\n?q=%22docker%20swarm%22</code></pre><p>Liefert Memories, die die exakte Phrase „docker swarm&quot; enthalten.</p>\n<h3>Präfix-Matching</h3>\n<pre><code class=\"hljs language-plaintext\">?q=docker*</code></pre><p>Liefert Memories mit Wörtern, die mit „docker&quot; beginnen (z. B. „dockers&quot;,\n„dockerfile&quot;, „dockerize&quot;).</p>\n<h3>Boolesches OR</h3>\n<pre><code class=\"hljs language-plaintext\">?q=docker+OR+kubernetes</code></pre><p>Liefert Memories, die „docker&quot; ODER „kubernetes&quot; enthalten.</p>\n<h3>Boolesches NOT</h3>\n<pre><code class=\"hljs language-plaintext\">?q=docker+-swarm\n?q=docker+NOT+swarm</code></pre><p>Liefert Memories, die „docker&quot;, aber NICHT „swarm&quot; enthalten.</p>\n<h3>Gruppierung</h3>\n<pre><code class=\"hljs language-plaintext\">?q=(docker+OR+kubernetes)+-test</code></pre><p>Liefert Memories mit „docker&quot; oder „kubernetes&quot;, aber nicht „test&quot;.</p>\n<h2>Praktische Beispiele</h2>\n<h3>Memories zu einem Projekt finden</h3>\n<pre><code class=\"hljs language-bash\">curl -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_MIND_KEY&quot;</span> \\\n     <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone/memory/search?q=synapse+deployment&quot;</span></code></pre><h3>Exakte Phrase finden</h3>\n<pre><code class=\"hljs language-bash\">curl -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_MIND_KEY&quot;</span> \\\n     <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone/memory/search?q=%22docker+swarm%22&quot;</span></code></pre><h3>Test-Memories ausschließen</h3>\n<pre><code class=\"hljs language-bash\">curl -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_MIND_KEY&quot;</span> \\\n     <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone/memory/search?q=production+-test&quot;</span></code></pre><h3>Nach Technologie suchen</h3>\n<pre><code class=\"hljs language-bash\">curl -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_MIND_KEY&quot;</span> \\\n     <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone/memory/search?q=(postgres+OR+sqlite)+-mysql&quot;</span></code></pre><h2>Ranking</h2>\n<p>FTS5 bewertet Ergebnisse nach Relevanz mit dem BM25-Algorithmus. Faktoren:</p>\n<ul>\n<li>Term-Frequency (wie oft der Begriff vorkommt)</li>\n<li>Inverse Document Frequency (seltenere Begriffe ranken höher)</li>\n<li>Dokumentlänge (kürzere Docs mit dem Begriff ranken höher)</li>\n<li>Spalten-Gewichtung (title &gt; content)</li>\n</ul>\n<p>Ergebnisse werden in Reihenfolge des Rankings zurückgegeben (relevanteste zuerst).</p>\n<h2>Performance</h2>\n<table>\n<thead>\n<tr>\n<th>Operation</th>\n<th>Latenz</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>100 Memories durchsuchen</td>\n<td>&lt; 5ms</td>\n</tr>\n<tr>\n<td>1.000 Memories durchsuchen</td>\n<td>&lt; 10ms</td>\n</tr>\n<tr>\n<td>10.000 Memories durchsuchen</td>\n<td>&lt; 25ms</td>\n</tr>\n<tr>\n<td>100.000 Memories durchsuchen</td>\n<td>&lt; 100ms</td>\n</tr>\n</tbody></table>\n<p>FTS5 ist stark für lese-lastige Workloads optimiert.</p>\n<h2>Einschränkungen</h2>\n<h3>Stemming</h3>\n<p>FTS5 macht standardmäßig kein Stemming. „running&quot; und „run&quot; sind unterschiedliche\nBegriffe.</p>\n<p><strong>Workaround:</strong> Präfix-Matching verwenden: <code>?q=run*</code></p>\n<h3>Tippfehler-Toleranz</h3>\n<p>FTS5 unterstützt kein Fuzzy-Matching. Ein Tippfehler liefert keine Ergebnisse.</p>\n<p><strong>Workaround:</strong> Verwende semantische Suche (<code>/memory/semantic-search</code>) für\nkonzeptionelles Matching.</p>\n<h3>Stoppwörter</h3>\n<p>Häufige Wörter (the, a, an, is) werden indiziert, sind aber für die Suche\nmeist nicht nützlich. FTS5 behandelt das automatisch.</p>\n<h2>FTS5 vs semantische Suche</h2>\n<table>\n<thead>\n<tr>\n<th>Aspekt</th>\n<th>FTS5</th>\n<th>Semantische Suche</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Geschwindigkeit</td>\n<td>Sub-millisecond</td>\n<td>50-100ms</td>\n</tr>\n<tr>\n<td>Matching</td>\n<td>Exakte Keywords</td>\n<td>Konzeptionell</td>\n</tr>\n<tr>\n<td>Tippfehler-Toleranz</td>\n<td>Keine</td>\n<td>Etwas</td>\n</tr>\n<tr>\n<td>Stemming</td>\n<td>Keins</td>\n<td>Implizit</td>\n</tr>\n<tr>\n<td>Benötigt Embeddings</td>\n<td>Nein</td>\n<td>Ja</td>\n</tr>\n<tr>\n<td>Optimal für</td>\n<td>Spezifische Begriffe</td>\n<td>Konzepte</td>\n</tr>\n</tbody></table>\n<p>Verwende FTS5, wenn du die Keywords kennst. Verwende semantische Suche, wenn du\n„Memories über X&quot; suchst und X anders beschrieben wird.</p>\n<h2>Best Practices</h2>\n<div class=\"callout callout-ok\"></div><h2>Nächste Schritte</h2>\n<ul>\n<li><a href=\"/docs/concepts/semantic-search\">Semantische Suche</a></li>\n<li><a href=\"/docs/api/memory\">Memory-API</a></li>\n<li><a href=\"/docs/guides/memory-best-practices\">Memory-Best-Practices</a></li>\n</ul>\n","urls":{"html":"/docs/concepts/fts5-search","text":"/docs/concepts/fts5-search?format=text","json":"/docs/concepts/fts5-search?format=json","llm":"/docs/concepts/fts5-search?format=llm"},"translations_available":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"]}