{"title":"FTS5 volledige-tekst zoekopdracht","slug":"fts5-search","category":"concepts","summary":"Hoe Synapse SQLite FTS5 gebruikt voor sub-milliseconde volledige-tekst memory-zoekopdrachten.","audience":["human","llm"],"tags":["concept","search","fts5","fulltext"],"difficulty":"advanced","updated":"2026-06-27","word_count":556,"read_minutes":3,"lang":"nl","translated":true,"requested_lang":"nl","content_markdown":"\n# FTS5 volledige-tekst zoekopdracht\n\nSynapse gebruikt FTS5 (Full-Text Search 5) voor snelle, flexibele memory-zoekopdrachten.\nDeze pagina legt uit hoe het werkt en hoe u het effectief kunt gebruiken.\n\n## Wat is FTS5?\n\nFTS5 is een SQLite-extensie (ook beschikbaar in PostgreSQL via extensies) die\nvolledige-tekst zoekmogelijkheden biedt. Het:\n\n- Indexeert tekstinhoud voor snelle trefwoordzoekopdrachten\n- Ondersteunt booleaanse operatoren (AND, OR, NOT)\n- Ondersteunt overeenkomsten met zinnen via aanhalingstekens\n- Ondersteunt prefix-overeenkomsten met `*`\n- Rangschikt resultaten op relevantie\n\nSynapse gebruikt FTS5 om alle memory-inhoud te indexeren, waardoor sub-milliseconde\nzoekopdrachten mogelijk zijn over duizenden herinneringen.\n\n## Hoe Synapse FTS5 gebruikt\n\nWanneer u `POST /memory` uitvoert:\n\n1. Memory-inhoud wordt opgeslagen in de `memories`-tabel\n2. Inhoud wordt ook ingevoegd in de FTS5 virtuele tabel\n3. FTS5 tokenizeert en indexeert de inhoud automatisch\n\nWanneer u `GET /memory/search?q=...` uitvoert:\n\n1. Synapse parseert de query met FTS5-syntaxis\n2. Voert een `MATCH` uit tegen de FTS5-index\n3. Filtert op `mind_id` (tenant-isolatie)\n4. Retourneert gerangschikte resultaten\n\n## Query-syntaxis\n\n### Eenvoudige trefwoordzoekopdracht\n\n```\n?q=docker\n```\n\nRetourneert herinneringen die \"docker\" bevatten.\n\n### Meerdere trefwoorden (impliciete AND)\n\n```\n?q=docker+swarm\n?q=docker%20swarm\n```\n\nRetourneert herinneringen die ZOWEL \"docker\" ALS \"swarm\" bevatten.\n\n### Zin-overeenkomst\n\n```\n?q=\"docker+swarm\"\n?q=%22docker%20swarm%22\n```\n\nRetourneert herinneringen die de exacte zin \"docker swarm\" bevatten.\n\n### Prefix-overeenkomst\n\n```\n?q=docker*\n```\n\nRetourneert herinneringen die woorden bevatten die beginnen met \"docker\" (bijv. \"dockers\",\n\"dockerfile\", \"dockerize\").\n\n### Booleaans OR\n\n```\n?q=docker+OR+kubernetes\n```\n\nRetourneert herinneringen die \"docker\" OF \"kubernetes\" bevatten.\n\n### Booleaans NOT\n\n```\n?q=docker+-swarm\n?q=docker+NOT+swarm\n```\n\nRetourneert herinneringen die \"docker\" bevatten maar NIET \"swarm\".\n\n### Groepering\n\n```\n?q=(docker+OR+kubernetes)+-test\n```\n\nRetourneert herinneringen die \"docker\" of \"kubernetes\" bevatten, maar niet \"test\".\n\n## Praktische voorbeelden\n\n### Vind herinneringen over een project\n\n```bash\ncurl -H \"Authorization: Bearer YOUR_MIND_KEY\" \\\n     \"https://synapse.schaefer.zone/memory/search?q=synapse+deployment\"\n```\n\n### Vind exacte zin\n\n```bash\ncurl -H \"Authorization: Bearer YOUR_MIND_KEY\" \\\n     \"https://synapse.schaefer.zone/memory/search?q=%22docker+swarm%22\"\n```\n\n### Sluit test-herinneringen uit\n\n```bash\ncurl -H \"Authorization: Bearer YOUR_MIND_KEY\" \\\n     \"https://synapse.schaefer.zone/memory/search?q=production+-test\"\n```\n\n### Vind op technologie\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## Rangschikking\n\nFTS5 rangschikt resultaten op relevantie met behulp van het BM25-algoritme. Factoren:\n\n- Termfrequentie (hoe vaak de term voorkomt)\n- Inverse documentfrequentie (zeldzame termen ranken hoger)\n- Documentlengte (kortere docs met de term ranken hoger)\n- Kolomgewicht (title > content)\n\nResultaten worden geretourneerd in rangschikkingsvolgorde (meest relevant eerst).\n\n## Prestaties\n\n| Bewerking | Latentie |\n|-----------|----------|\n| 100 herinneringen doorzoeken | < 5ms |\n| 1.000 herinneringen doorzoeken | < 10ms |\n| 10.000 herinneringen doorzoeken | < 25ms |\n| 100.000 herinneringen doorzoeken | < 100ms |\n\nFTS5 is sterk geoptimaliseerd voor lees-intensieve workloads.\n\n## Beperkingen\n\n### Stamvorming\n\nFTS5 doet standaard geen stamvorming. \"running\" en \"run\" zijn verschillende termen.\n\n**Tijdelijke oplossing:** Gebruik prefix-overeenkomst: `?q=run*`\n\n### Typefout-tolerantie\n\nFTS5 ondersteunt geen fuzzy matching. Een typefout levert geen resultaten op.\n\n**Tijdelijke oplossing:** Gebruik semantisch zoeken (`/memory/semantic-search`) voor\nconceptuele overeenkomsten.\n\n### Stopwoorden\n\nVeelvoorkomende woorden (the, a, an, is) worden geïndexeerd maar zijn mogelijk niet\nnuttig voor zoekopdrachten. FTS5 handelt dit automatisch af.\n\n## FTS5 versus semantisch zoeken\n\n| Aspect | FTS5 | Semantisch zoeken |\n|--------|------|-------------------|\n| Snelheid | Sub-milliseconde | 50-100ms |\n| Matching | Exacte trefwoorden | Conceptueel |\n| Typefout-tolerantie | Geen | Enigszins |\n| Stamvorming | Geen | Impliciet |\n| Vereist embeddings | Nee | Ja |\n| Geschikt voor | Specifieke termen | Concepten |\n\nGebruik FTS5 als u de trefwoorden kent. Gebruik semantisch zoeken als u\n\"herinneringen over X\" wilt waarbij X anders wordt omschreven.\n\n## Best practices\n\n> [!TIP]\n> - **Gebruik specifieke termen** — \"docker swarm\" is beter dan \"container orchestration\"\n> - **Gebruik aanhalingstekens voor zinnen** — `\"docker swarm\"` garandeert zinsovereenkomst\n> - **Gebruik prefix voor variaties** — `deploy*` vangt \"deploy\", \"deployment\", \"deploying\"\n> - **Sluit ruis uit** — `-test` filtert test-herinneringen weg\n> - **Combineer met tags** — `?q=docker&tag=production` verfijnt resultaten\n\n## Volgende stappen\n\n- [Semantisch zoeken](/docs/concepts/semantic-search)\n- [Memory API](/docs/api/memory)\n- [Memory-best-practices](/docs/guides/memory-best-practices)\n","content_html":"<h1>FTS5 volledige-tekst zoekopdracht</h1>\n<p>Synapse gebruikt FTS5 (Full-Text Search 5) voor snelle, flexibele memory-zoekopdrachten.\nDeze pagina legt uit hoe het werkt en hoe u het effectief kunt gebruiken.</p>\n<h2>Wat is FTS5?</h2>\n<p>FTS5 is een SQLite-extensie (ook beschikbaar in PostgreSQL via extensies) die\nvolledige-tekst zoekmogelijkheden biedt. Het:</p>\n<ul>\n<li>Indexeert tekstinhoud voor snelle trefwoordzoekopdrachten</li>\n<li>Ondersteunt booleaanse operatoren (AND, OR, NOT)</li>\n<li>Ondersteunt overeenkomsten met zinnen via aanhalingstekens</li>\n<li>Ondersteunt prefix-overeenkomsten met <code>*</code></li>\n<li>Rangschikt resultaten op relevantie</li>\n</ul>\n<p>Synapse gebruikt FTS5 om alle memory-inhoud te indexeren, waardoor sub-milliseconde\nzoekopdrachten mogelijk zijn over duizenden herinneringen.</p>\n<h2>Hoe Synapse FTS5 gebruikt</h2>\n<p>Wanneer u <code>POST /memory</code> uitvoert:</p>\n<ol>\n<li>Memory-inhoud wordt opgeslagen in de <code>memories</code>-tabel</li>\n<li>Inhoud wordt ook ingevoegd in de FTS5 virtuele tabel</li>\n<li>FTS5 tokenizeert en indexeert de inhoud automatisch</li>\n</ol>\n<p>Wanneer u <code>GET /memory/search?q=...</code> uitvoert:</p>\n<ol>\n<li>Synapse parseert de query met FTS5-syntaxis</li>\n<li>Voert een <code>MATCH</code> uit tegen de FTS5-index</li>\n<li>Filtert op <code>mind_id</code> (tenant-isolatie)</li>\n<li>Retourneert gerangschikte resultaten</li>\n</ol>\n<h2>Query-syntaxis</h2>\n<h3>Eenvoudige trefwoordzoekopdracht</h3>\n<pre><code class=\"hljs language-plaintext\">?q=docker</code></pre><p>Retourneert herinneringen die &quot;docker&quot; bevatten.</p>\n<h3>Meerdere trefwoorden (impliciete AND)</h3>\n<pre><code class=\"hljs language-plaintext\">?q=docker+swarm\n?q=docker%20swarm</code></pre><p>Retourneert herinneringen die ZOWEL &quot;docker&quot; ALS &quot;swarm&quot; bevatten.</p>\n<h3>Zin-overeenkomst</h3>\n<pre><code class=\"hljs language-plaintext\">?q=&quot;docker+swarm&quot;\n?q=%22docker%20swarm%22</code></pre><p>Retourneert herinneringen die de exacte zin &quot;docker swarm&quot; bevatten.</p>\n<h3>Prefix-overeenkomst</h3>\n<pre><code class=\"hljs language-plaintext\">?q=docker*</code></pre><p>Retourneert herinneringen die woorden bevatten die beginnen met &quot;docker&quot; (bijv. &quot;dockers&quot;,\n&quot;dockerfile&quot;, &quot;dockerize&quot;).</p>\n<h3>Booleaans OR</h3>\n<pre><code class=\"hljs language-plaintext\">?q=docker+OR+kubernetes</code></pre><p>Retourneert herinneringen die &quot;docker&quot; OF &quot;kubernetes&quot; bevatten.</p>\n<h3>Booleaans NOT</h3>\n<pre><code class=\"hljs language-plaintext\">?q=docker+-swarm\n?q=docker+NOT+swarm</code></pre><p>Retourneert herinneringen die &quot;docker&quot; bevatten maar NIET &quot;swarm&quot;.</p>\n<h3>Groepering</h3>\n<pre><code class=\"hljs language-plaintext\">?q=(docker+OR+kubernetes)+-test</code></pre><p>Retourneert herinneringen die &quot;docker&quot; of &quot;kubernetes&quot; bevatten, maar niet &quot;test&quot;.</p>\n<h2>Praktische voorbeelden</h2>\n<h3>Vind herinneringen over een project</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>Vind exacte zin</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>Sluit test-herinneringen uit</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>Vind op technologie</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>Rangschikking</h2>\n<p>FTS5 rangschikt resultaten op relevantie met behulp van het BM25-algoritme. Factoren:</p>\n<ul>\n<li>Termfrequentie (hoe vaak de term voorkomt)</li>\n<li>Inverse documentfrequentie (zeldzame termen ranken hoger)</li>\n<li>Documentlengte (kortere docs met de term ranken hoger)</li>\n<li>Kolomgewicht (title &gt; content)</li>\n</ul>\n<p>Resultaten worden geretourneerd in rangschikkingsvolgorde (meest relevant eerst).</p>\n<h2>Prestaties</h2>\n<table>\n<thead>\n<tr>\n<th>Bewerking</th>\n<th>Latentie</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>100 herinneringen doorzoeken</td>\n<td>&lt; 5ms</td>\n</tr>\n<tr>\n<td>1.000 herinneringen doorzoeken</td>\n<td>&lt; 10ms</td>\n</tr>\n<tr>\n<td>10.000 herinneringen doorzoeken</td>\n<td>&lt; 25ms</td>\n</tr>\n<tr>\n<td>100.000 herinneringen doorzoeken</td>\n<td>&lt; 100ms</td>\n</tr>\n</tbody></table>\n<p>FTS5 is sterk geoptimaliseerd voor lees-intensieve workloads.</p>\n<h2>Beperkingen</h2>\n<h3>Stamvorming</h3>\n<p>FTS5 doet standaard geen stamvorming. &quot;running&quot; en &quot;run&quot; zijn verschillende termen.</p>\n<p><strong>Tijdelijke oplossing:</strong> Gebruik prefix-overeenkomst: <code>?q=run*</code></p>\n<h3>Typefout-tolerantie</h3>\n<p>FTS5 ondersteunt geen fuzzy matching. Een typefout levert geen resultaten op.</p>\n<p><strong>Tijdelijke oplossing:</strong> Gebruik semantisch zoeken (<code>/memory/semantic-search</code>) voor\nconceptuele overeenkomsten.</p>\n<h3>Stopwoorden</h3>\n<p>Veelvoorkomende woorden (the, a, an, is) worden geïndexeerd maar zijn mogelijk niet\nnuttig voor zoekopdrachten. FTS5 handelt dit automatisch af.</p>\n<h2>FTS5 versus semantisch zoeken</h2>\n<table>\n<thead>\n<tr>\n<th>Aspect</th>\n<th>FTS5</th>\n<th>Semantisch zoeken</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Snelheid</td>\n<td>Sub-milliseconde</td>\n<td>50-100ms</td>\n</tr>\n<tr>\n<td>Matching</td>\n<td>Exacte trefwoorden</td>\n<td>Conceptueel</td>\n</tr>\n<tr>\n<td>Typefout-tolerantie</td>\n<td>Geen</td>\n<td>Enigszins</td>\n</tr>\n<tr>\n<td>Stamvorming</td>\n<td>Geen</td>\n<td>Impliciet</td>\n</tr>\n<tr>\n<td>Vereist embeddings</td>\n<td>Nee</td>\n<td>Ja</td>\n</tr>\n<tr>\n<td>Geschikt voor</td>\n<td>Specifieke termen</td>\n<td>Concepten</td>\n</tr>\n</tbody></table>\n<p>Gebruik FTS5 als u de trefwoorden kent. Gebruik semantisch zoeken als u\n&quot;herinneringen over X&quot; wilt waarbij X anders wordt omschreven.</p>\n<h2>Best practices</h2>\n<div class=\"callout callout-ok\"></div><h2>Volgende stappen</h2>\n<ul>\n<li><a href=\"/docs/concepts/semantic-search\">Semantisch zoeken</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"]}