Skip to main content

Wyszukiwanie pełnotekstowe FTS5

Jak Synapse wykorzystuje SQLite FTS5 do wyszukiwania wspomnień poniżej milisekundy.


Wyszukiwanie pełnotekstowe FTS5

Synapse używa FTS5 (Full-Text Search 5) do szybkiego i elastycznego wyszukiwania wspomnień. Ta strona wyjaśnia, jak to działa i jak efektywnie tego używać.

Czym jest FTS5?

FTS5 to rozszerzenie SQLite (dostępne również w PostgreSQL przez rozszerzenia), które zapewnia możliwości wyszukiwania pełnotekstowego. Spełnia funkcje:

  • Indeksuje treść tekstową pod kątem szybkiego wyszukiwania słów kluczowych
  • Obsługuje operatory logiczne (AND, OR, NOT)
  • Obsługuje dopasowywanie fraz z cudzysłowami
  • Obsługuje dopasowywanie prefiksów z *
  • Ranguje wyniki według trafności

Synapse używa FTS5 do indeksowania całej treści wspomnień, co umożliwia wyszukiwanie poniżej milisekundy w tysiącach wspomnień.

Jak Synapse używa FTS5

Gdy wykonywane jest POST /memory:

  1. Treść wspomnienia jest zapisywana w tabeli memories
  2. Treść jest również wstawiana do tabeli wirtualnej FTS5
  3. FTS5 automatycznie tokenizuje i indeksuje treść

Gdy wykonywane jest GET /memory/search?q=...:

  1. Synapse parsuje zapytanie składnią FTS5
  2. Wykonuje MATCH wobec indeksu FTS5
  3. Filtruje po mind_id (izolacja dzierżawcy)
  4. Zwraca wyniki z rankingiem

Składnia zapytania

Proste wyszukiwanie słów kluczowych

?q=docker

Zwraca wspomnienia zawierające „docker".

Wiele słów kluczowych (domyślnie AND)

?q=docker+swarm
?q=docker%20swarm

Zwraca wspomnienia zawierające ZARÓWNO „docker", JAK i „swarm".

Dopasowywanie fraz

?q="docker+swarm"
?q=%22docker%20swarm%22

Zwraca wspomnienia zawierające dokładną frazę „docker swarm".

Dopasowywanie prefiksów

?q=docker*

Zwraca wspomnienia zawierające słowa zaczynające się od „docker" (np. „dockers", „dockerfile", „dockerize").

Operator logiczny OR

?q=docker+OR+kubernetes

Zwraca wspomnienia zawierające „docker" LUB „kubernetes".

Operator logiczny NOT

?q=docker+-swarm
?q=docker+NOT+swarm

Zwraca wspomnienia zawierające „docker", ale NIE „swarm".

Grupowanie

?q=(docker+OR+kubernetes)+-test

Zwraca wspomnienia zawierające „docker" lub „kubernetes", ale nie „test".

Praktyczne przykłady

Znajdowanie wspomnień o projekcie

curl -H "Authorization: Bearer YOUR_MIND_KEY" \
     "https://synapse.schaefer.zone/memory/search?q=synapse+deployment"

Znajdowanie dokładnej frazy

curl -H "Authorization: Bearer YOUR_MIND_KEY" \
     "https://synapse.schaefer.zone/memory/search?q=%22docker+swarm%22"

Wykluczanie wspomnień testowych

curl -H "Authorization: Bearer YOUR_MIND_KEY" \
     "https://synapse.schaefer.zone/memory/search?q=production+-test"

Wyszukiwanie po technologii

curl -H "Authorization: Bearer YOUR_MIND_KEY" \
     "https://synapse.schaefer.zone/memory/search?q=(postgres+OR+sqlite)+-mysql"

Ranking

FTS5 ranguje wyniki pod kątem trafności algorytmem BM25. Czynniki:

  • Częstotliwość terminu (jak często występuje)
  • Odwrotna częstotliwość dokumentu (rzadsze terminy mają wyższy ranking)
  • Długość dokumentu (krótsze dokumenty z terminem mają wyższy ranking)
  • Waga kolumny (tytuł > treść)

Wyniki są zwracane w kolejności rangi (najbardziej trafne najpierw).

Wydajność

Operacja Opóźnienie
Wyszukiwanie 100 wspomnień < 5 ms
Wyszukiwanie 1 000 wspomnień < 10 ms
Wyszukiwanie 10 000 wspomnień < 25 ms
Wyszukiwanie 100 000 wspomnień < 100 ms

FTS5 jest wysoce zoptymalizowany dla obciążeń odczytu.

Ograniczenia

Stemming

FTS5 domyślnie nie wykonuje stemmingu. „Running" i „run" to różne terminy.

Obejście: Użyć dopasowania prefiksu: ?q=run*

Tolerancja literówek

FTS5 nie obsługuje dopasowywania rozmytego. Literówka zwróci brak wyników.

Obejście: Użyć wyszukiwania semantycznego (/memory/semantic-search) do dopasowywania koncepcyjnego.

Słowa stop

Popularne słowa (the, a, an, is) są indeksowane, ale mogą nie być użyteczne w wyszukiwaniu. FTS5 obsługuje to automatycznie.

FTS5 a wyszukiwanie semantyczne

Aspekt FTS5 Wyszukiwanie semantyczne
Prędkość Poniżej milisekundy 50-100 ms
Dopasowywanie Dokładne słowa kluczowe Koncepcyjne
Tolerancja literówek Brak Pewna
Stemming Brak Domniemany
Wymaga osadzeń Nie Tak
Najlepsze do Konkretnych terminów Koncepcji

Należy używać FTS5, gdy znane są słowa kluczowe. Wyszukiwanie semantyczne należy stosować, gdy potrzebne są „wspomnienia o X", gdzie X jest opisane inaczej.

Najlepsze praktyki

Następne kroki