# FTS5 fulltextssökning Synapse använder FTS5 (Full-Text Search 5) för snabb, flexibel minnessökning. Den här sidan förklarar hur det fungerar och hur man använder det effektivt. ## Vad är FTS5? FTS5 är ett SQLite-tillägg (även tillgängligt i PostgreSQL via tillägg) som tillhandahåller fulltextssökningsfunktionalitet. Det: - Indexerar textinnehåll för snabb nyckelordssökning - Stöder booleska operatorer (AND, OR, NOT) - Stöder frasmatchning med citattecken - Stöder prefixmatchning med `*` - Rankar resultat efter relevans Synapse använder FTS5 för att indexera allt minnesinnehåll, vilket möjliggör sökning under en millisekund över tusentals minnen. ## Hur Synapse använder FTS5 När ni gör `POST /memory`: 1. Minnesinnehåll lagras i `memories`-tabellen 2. Innehåll infogas också i FTS5 virtuell tabell 3. FTS5 tokeniserar och indexerar innehållet automatiskt När ni gör `GET /memory/search?q=...`: 1. Synapse tolkar frågan med FTS5-syntax 2. Kör en `MATCH` mot FTS5-indexet 3. Filtrerar efter `mind_id` (klientisolation) 4. Returnerar rankade resultat ## Frågesyntax ### Enkel nyckelordssökning ``` ?q=docker ``` Returnerar minnen som innehåller "docker". ### Flera nyckelord (implicit AND) ``` ?q=docker+swarm ?q=docker%20swarm ``` Returnerar minnen som innehåller BÅDE "docker" OCH "swarm". ### Frasmatchning ``` ?q="docker+swarm" ?q=%22docker%20swarm%22 ``` Returnerar minnen som innehåller den exakta frasen "docker swarm". ### Prefixmatchning ``` ?q=docker* ``` Returnerar minnen som innehåller ord som börjar med "docker" (t.ex. "dockers", "dockerfile", "dockerize"). ### Boolesk OR ``` ?q=docker+OR+kubernetes ``` Returnerar minnen som innehåller "docker" ELLER "kubernetes". ### Boolesk NOT ``` ?q=docker+-swarm ?q=docker+NOT+swarm ``` Returnerar minnen som innehåller "docker" men INTE "swarm". ### Gruppering ``` ?q=(docker+OR+kubernetes)+-test ``` Returnerar minnen som innehåller "docker" eller "kubernetes", men inte "test". ## Praktiska exempel ### Hitta minnen om ett projekt ```bash curl -H "Authorization: Bearer YOUR_MIND_KEY" \ "https://synapse.schaefer.zone/memory/search?q=synapse+deployment" ``` ### Hitta exakt fras ```bash curl -H "Authorization: Bearer YOUR_MIND_KEY" \ "https://synapse.schaefer.zone/memory/search?q=%22docker+swarm%22" ``` ### Uteslut testminnen ```bash curl -H "Authorization: Bearer YOUR_MIND_KEY" \ "https://synapse.schaefer.zone/memory/search?q=production+-test" ``` ### Hitta efter teknik ```bash curl -H "Authorization: Bearer YOUR_MIND_KEY" \ "https://synapse.schaefer.zone/memory/search?q=(postgres+OR+sqlite)+-mysql" ``` ## Rankning FTS5 rankar resultat efter relevans med BM25-algoritmen. Faktorer: - Termfrekvens (hur ofta termen förekommer) - Inverse document frequency (sällsynta termer rankas högre) - Dokumentlängd (kortare dokument med termen rankas högre) - Kolumnvikt (title > content) Resultat returneras i rankningsordning (mest relevant först). ## Prestanda | Åtgärd | Latens | |-----------|---------| | Sök 100 minnen | < 5 ms | | Sök 1 000 minnen | < 10 ms | | Sök 10 000 minnen | < 25 ms | | Sök 100 000 minnen | < 100 ms | FTS5 är högt optimerat för läsintensiva arbetsbelastningar. ## Begränsningar ### Stamning FTS5 gör inte stamning som standard. "running" och "run" är olika termer. **Lösning:** Använd prefixmatchning: `?q=run*` ### Tolerans mot felstavning FTS5 stöder inte oskarp matchning. En felstavning returnerar inga resultat. **Lösning:** Använd semantisk sökning (`/memory/semantic-search`) för begreppsmatchning. ### Stopword Vanliga ord (the, a, an, is) indexeras men kanske inte är användbara för sökning. FTS5 hanterar detta automatiskt. ## FTS5 vs semantisk sökning | Aspekt | FTS5 | Semantisk sökning | |--------|------|-----------------| | Hastighet | Under en millisekund | 50–100 ms | | Matchning | Exakta nyckelord | Begreppslig | | Tolerans mot felstavning | Ingen | Någon | | Stamning | Ingen | Implicit | | Kräver inbäddningar | Nej | Ja | | Bäst för | Specifika termer | Begrepp | Använd FTS5 när ni känner till nyckelorden. Använd semantisk sökning när ni vill ha "minnen om X" där X beskrivs på ett annat sätt. ## Bästa praxis > [!TIP] > - **Använd specifika termer** — "docker swarm" slår "container orchestration" > - **Citera fraser** — `"docker swarm"` säkerställer frasmatchning > - **Använd prefix för variationer** — `deploy*` fångar "deploy", "deployment", "deploying" > - **Uteslut brus** — `-test` filtrerar bort testminnen > - **Kombinera med taggar** — `?q=docker&tag=production` snävar in resultatet ## Nästa steg - [Semantisk sökning](/docs/concepts/semantic-search) - [Memory API](/docs/api/memory) - [Minnesbästa praxis](/docs/guides/memory-best-practices)