# 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`: 1. Konten memori disimpan di tabel `memories` 2. Konten juga dimasukkan ke tabel virtual FTS5 3. FTS5 secara otomatis menokenisasi dan mengindeks konten Saat Anda `GET /memory/search?q=...`: 1. Synapse mengurai kueri menggunakan sintaks FTS5 2. Menjalankan `MATCH` terhadap indeks FTS5 3. Memfilter berdasarkan `mind_id` (isolasi tenant) 4. Mengembalikan hasil yang diberi peringkat ## Sintaks Kueri ### Pencarian kata kunci sederhana ``` ?q=docker ``` Mengembalikan memori yang mengandung "docker". ### Beberapa kata kunci (AND implisit) ``` ?q=docker+swarm ?q=docker%20swarm ``` Mengembalikan memori yang mengandung "docker" DAN "swarm". ### Pencocokan frasa ``` ?q="docker+swarm" ?q=%22docker%20swarm%22 ``` Mengembalikan 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+kubernetes ``` Mengembalikan memori yang mengandung "docker" ATAU "kubernetes". ### Boolean NOT ``` ?q=docker+-swarm ?q=docker+NOT+swarm ``` Mengembalikan memori yang mengandung "docker" tetapi TIDAK "swarm". ### Pengelompokan ``` ?q=(docker+OR+kubernetes)+-test ``` Mengembalikan memori yang mengandung "docker" atau "kubernetes", tetapi tidak "test". ## Contoh Praktis ### Mencari memori tentang sebuah proyek ```bash curl -H "Authorization: Bearer YOUR_MIND_KEY" \ "https://synapse.schaefer.zone/memory/search?q=synapse+deployment" ``` ### Mencari frasa persis ```bash curl -H "Authorization: Bearer YOUR_MIND_KEY" \ "https://synapse.schaefer.zone/memory/search?q=%22docker+swarm%22" ``` ### Mengecualikan memori uji ```bash curl -H "Authorization: Bearer YOUR_MIND_KEY" \ "https://synapse.schaefer.zone/memory/search?q=production+-test" ``` ### Mencari berdasarkan teknologi ```bash 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. ## Praktik Terbaik > [!TIP] > - **Gunakan istilah spesifik** — "docker swarm" lebih baik dari "container orchestration" > - **Kutip frasa** — `"docker swarm"` memastikan pencocokan frasa > - **Gunakan prefix untuk variasi** — `deploy*` menangkap "deploy", "deployment", "deploying" > - **Kecualikan kebisingan** — `-test` memfilter memori uji > - **Kombinasikan dengan tag** — `?q=docker&tag=production` mempersempit hasil ## Langkah Berikutnya - [Pencarian Semantik](/docs/concepts/semantic-search) - [Memory API](/docs/api/memory) - [Praktik Terbaik Memori](/docs/guides/memory-best-practices)