Skip to main content

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:

  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

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.

Praktik Terbaik

Langkah Berikutnya