Pencarian Teks Penuh FTS5
Bagaimana Synapse menggunakan SQLite FTS5 untuk pencarian memori teks penuh sub-milidetik.
Pencarian Teks Penuh FTS5
Synapse menggunakan FTS5 (Full-Text Search 5) untuk pencarian memori yang cepat dan fleksibel. Halaman ini menjelaskan cara kerjanya dan cara menggunakannya secara efektif.
Apa itu FTS5?
FTS5 adalah ekstensi SQLite (juga tersedia di PostgreSQL melalui ekstensi) yang menyediakan kemampuan pencarian teks penuh. FTS5:
- Mengindeks konten teks untuk pencarian kata kunci yang cepat
- Mendukung operator boolean (AND, OR, NOT)
- Mendukung pencocokan frasa dengan tanda kutip
- Mendukung pencocokan prefix dengan
* - Memberi peringkat hasil berdasarkan relevansi
Synapse menggunakan FTS5 untuk mengindeks semua konten memori, memungkinkan pencarian sub-milidetik di ribuan memori.
Bagaimana Synapse Menggunakan FTS5
Saat Anda POST /memory:
- Konten memori disimpan di tabel
memories - Konten juga dimasukkan ke tabel virtual FTS5
- FTS5 secara otomatis menokenisasi dan mengindeks konten
Saat Anda GET /memory/search?q=...:
- Synapse mengurai kueri menggunakan sintaks FTS5
- Menjalankan
MATCHterhadap indeks FTS5 - Memfilter berdasarkan
mind_id(isolasi tenant) - Mengembalikan hasil yang diberi peringkat
Sintaks Kueri
Pencarian kata kunci sederhana
?q=dockerMengembalikan memori yang mengandung "docker".
Beberapa kata kunci (AND implisit)
?q=docker+swarm
?q=docker%20swarmMengembalikan memori yang mengandung "docker" DAN "swarm".
Pencocokan frasa
?q="docker+swarm"
?q=%22docker%20swarm%22Mengembalikan memori yang mengandung frasa persis "docker swarm".
Pencocokan prefix
?q=docker*Mengembalikan memori yang mengandung kata yang dimulai dengan "docker" (mis. "dockers", "dockerfile", "dockerize").
Boolean OR
?q=docker+OR+kubernetesMengembalikan memori yang mengandung "docker" ATAU "kubernetes".
Boolean NOT
?q=docker+-swarm
?q=docker+NOT+swarmMengembalikan memori yang mengandung "docker" tetapi TIDAK "swarm".
Pengelompokan
?q=(docker+OR+kubernetes)+-testMengembalikan memori yang mengandung "docker" atau "kubernetes", tetapi tidak "test".
Contoh Praktis
Mencari memori tentang sebuah proyek
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
"https://synapse.schaefer.zone/memory/search?q=synapse+deployment"Mencari frasa persis
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
"https://synapse.schaefer.zone/memory/search?q=%22docker+swarm%22"Mengecualikan memori uji
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
"https://synapse.schaefer.zone/memory/search?q=production+-test"Mencari berdasarkan teknologi
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
"https://synapse.schaefer.zone/memory/search?q=(postgres+OR+sqlite)+-mysql"Peringkat
FTS5 memberi peringkat hasil berdasarkan relevansi menggunakan algoritma BM25. Faktor:
- Frekuensi istilah (seberapa sering istilah muncul)
- Inverse document frequency (istilah yang lebih langka berperingkat lebih tinggi)
- Panjang dokumen (dokumen lebih pendek dengan istilah tersebut berperingkat lebih tinggi)
- Bobot kolom (title > content)
Hasil dikembalikan dalam urutan peringkat (paling relevan pertama).
Performa
| Operasi | Latensi |
|---|---|
| Mencari 100 memori | < 5ms |
| Mencari 1.000 memori | < 10ms |
| Mencari 10.000 memori | < 25ms |
| Mencari 100.000 memori | < 100ms |
FTS5 sangat dioptimalkan untuk beban kerja yang banyak dibaca.
Batasan
Stemming
FTS5 tidak melakukan stemming secara default. "running" dan "run" adalah istilah yang berbeda.
Solusi: Gunakan pencocokan prefix: ?q=run*
Toleransi typo
FTS5 tidak mendukung pencocokan fuzzy. Typo akan mengembalikan tidak ada hasil.
Solusi: Gunakan pencarian semantik (/memory/semantic-search) untuk
pencocokan konseptual.
Stop words
Kata umum (the, a, an, is) diindeks tetapi mungkin tidak berguna untuk pencarian. FTS5 menangani ini secara otomatis.
FTS5 vs Pencarian Semantik
| Aspek | FTS5 | Pencarian Semantik |
|---|---|---|
| Kecepatan | Sub-milidetik | 50-100ms |
| Pencocokan | Kata kunci persis | Konseptual |
| Toleransi typo | Tidak ada | Sebagian |
| Stemming | Tidak ada | Implisit |
| Memerlukan embeddings | Tidak | Ya |
| Terbaik untuk | Istilah spesifik | Konsep |
Gunakan FTS5 ketika Anda tahu kata kuncinya. Gunakan pencarian semantik ketika Anda ingin "memori tentang X" di mana X dideskripsikan secara berbeda.