# Wyszukiwanie pełnotekstowe FTS5 SUMMARY: 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 : 1. Treść wspomnienia jest zapisywana w tabeli 2. Treść jest również wstawiana do tabeli wirtualnej FTS5 3. FTS5 automatycznie tokenizuje i indeksuje treść Gdy wykonywane jest : 1. Synapse parsuje zapytanie składnią FTS5 2. Wykonuje wobec indeksu FTS5 3. Filtruje po (izolacja dzierżawcy) 4. Zwraca wyniki z rankingiem Składnia zapytania Proste wyszukiwanie słów kluczowych [CODE BLOCK] Zwraca wspomnienia zawierające „docker". Wiele słów kluczowych (domyślnie AND) [CODE BLOCK] Zwraca wspomnienia zawierające ZARÓWNO „docker", JAK i „swarm". Dopasowywanie fraz [CODE BLOCK] Zwraca wspomnienia zawierające dokładną frazę „docker swarm". Dopasowywanie prefiksów [CODE BLOCK] Zwraca wspomnienia zawierające słowa zaczynające się od „docker" (np. „dockers", „dockerfile", „dockerize"). Operator logiczny OR [CODE BLOCK] Zwraca wspomnienia zawierające „docker" LUB „kubernetes". Operator logiczny NOT [CODE BLOCK] Zwraca wspomnienia zawierające „docker", ale NIE „swarm". Grupowanie [CODE BLOCK] Zwraca wspomnienia zawierające „docker" lub „kubernetes", ale nie „test". Praktyczne przykłady Znajdowanie wspomnień o projekcie [CODE BLOCK] Znajdowanie dokładnej frazy [CODE BLOCK] Wykluczanie wspomnień testowych [CODE BLOCK] Wyszukiwanie po technologii [CODE BLOCK] 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: Tolerancja literówek FTS5 nie obsługuje dopasowywania rozmytego. Literówka zwróci brak wyników. Obejście: Użyć wyszukiwania semantycznego () 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 > [!TIP] > - Używać konkretnych terminów — „docker swarm" jest lepsze niż „container orchestration" > - Cytować frazy — zapewnia dopasowanie frazy > - Używać prefiksu dla wariantów — wyłapuje „deploy", „deployment", „deploying" > - Wykluczać szum — odfiltrowuje wspomnienia testowe > - Łączyć z tagami — zawęża wyniki Następne kroki - Wyszukiwanie semantyczne - Memory API - Najlepsze praktyki pamięci