FTS5 fulltextssökning
Hur Synapse använder SQLite FTS5 för fulltextssökning av minnen under en millisekund.
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:
- Minnesinnehåll lagras i
memories-tabellen - Innehåll infogas också i FTS5 virtuell tabell
- FTS5 tokeniserar och indexerar innehållet automatiskt
När ni gör GET /memory/search?q=...:
- Synapse tolkar frågan med FTS5-syntax
- Kör en
MATCHmot FTS5-indexet - Filtrerar efter
mind_id(klientisolation) - Returnerar rankade resultat
Frågesyntax
Enkel nyckelordssökning
?q=dockerReturnerar minnen som innehåller "docker".
Flera nyckelord (implicit AND)
?q=docker+swarm
?q=docker%20swarmReturnerar minnen som innehåller BÅDE "docker" OCH "swarm".
Frasmatchning
?q="docker+swarm"
?q=%22docker%20swarm%22Returnerar 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+kubernetesReturnerar minnen som innehåller "docker" ELLER "kubernetes".
Boolesk NOT
?q=docker+-swarm
?q=docker+NOT+swarmReturnerar minnen som innehåller "docker" men INTE "swarm".
Gruppering
?q=(docker+OR+kubernetes)+-testReturnerar minnen som innehåller "docker" eller "kubernetes", men inte "test".
Praktiska exempel
Hitta minnen om ett projekt
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
"https://synapse.schaefer.zone/memory/search?q=synapse+deployment"Hitta exakt fras
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
"https://synapse.schaefer.zone/memory/search?q=%22docker+swarm%22"Uteslut testminnen
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
"https://synapse.schaefer.zone/memory/search?q=production+-test"Hitta efter teknik
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.