Skip to main content

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:

  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

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.

Bästa praxis

Nästa steg