FTS5 Tam Metin Arama
Synapse, milisaniyenin altında tam metin bellek araması için SQLite FTS5'i nasıl kullanır.
FTS5 Tam Metin Arama
Synapse, hızlı ve esnek bellek araması için FTS5 (Full-Text Search 5) kullanır. Bu sayfa, nasıl çalıştığını ve etkili nasıl kullanılacağını açıklar.
FTS5 Nedir?
FTS5, bir SQLite uzantısıdır (uzantılar yoluyla PostgreSQL'de de mevcuttur) ve tam metin arama yetenekleri sağlar. Şunları yapar:
- Hızlı anahtar kelime araması için metin içeriğini indeksler
- Boolean operatörleri destekler (AND, OR, NOT)
- Tırnak işaretleriyle deyim eşleştirme destekler
*ile ön ek eşleştirme destekler- Sonuçları alaka düzeyine göre sıralar
Synapse, tüm bellek içeriğini indekslemek için FTS5 kullanır ve binlerce bellekte milisaniyenin altında arama sağlar.
Synapse FTS5'i Nasıl Kullanır
POST /memory yaptığınızda:
- Bellek içeriği
memoriestablosunda saklanır - İçerik aynı zamanda FTS5 sanal tablosuna eklenir
- FTS5 içeriği otomatik olarak tokenleştirir ve indeksler
GET /memory/search?q=... yaptığınızda:
- Synapse sorguyu FTS5 sözdizimi kullanarak ayrıştırır
- FTS5 indeksine karşı bir
MATCHyürütür mind_id'yegöre filtreler (kiracı izolasyonu)- Sıralanmış sonuçları döndürür
Sorgu Sözdizimi
Basit anahtar kelime arama
?q=docker"docker" içeren bellekleri döndürür.
Birden çok anahtar kelime (örtük AND)
?q=docker+swarm
?q=docker%20swarmHEM "docker" HEM de "swarm" içeren bellekleri döndürür.
Deyim eşleştirme
?q="docker+swarm"
?q=%22docker%20swarm%22Tam "docker swarm" deyimini içeren bellekleri döndürür.
Ön ek eşleştirme
?q=docker*"docker" ile başlayan kelimeleri (örn. "dockers", "dockerfile", "dockerize") içeren bellekleri döndürür.
Boolean OR
?q=docker+OR+kubernetes"docker" VEYA "kubernetes" içeren bellekleri döndürür.
Boolean NOT
?q=docker+-swarm
?q=docker+NOT+swarm"docker" içeren ama "swarm" içermeyen bellekleri döndürür.
Gruplama
?q=(docker+OR+kubernetes)+-test"docker" veya "kubernetes" içeren ama "test" içermeyen bellekleri döndürür.
Pratik Örnekler
Bir proje hakkındaki bellekleri bul
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
"https://synapse.schaefer.zone/memory/search?q=synapse+deployment"Tam deyimi bul
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
"https://synapse.schaefer.zone/memory/search?q=%22docker+swarm%22"Test belleklerini hariç tut
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
"https://synapse.schaefer.zone/memory/search?q=production+-test"Teknolojiye göre bul
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
"https://synapse.schaefer.zone/memory/search?q=(postgres+OR+sqlite)+-mysql"Sıralama
FTS5, sonuçları BM25 algoritmasını kullanarak alaka düzeyine göre sıralar. Faktörler:
- Terim sıklığı (terim ne sıklıkta görünüyor)
- Ters belge sıklığı (daha nadir terimler daha yüksek sıralanır)
- Belge uzunluğu (terimi içeren daha kısa belgeler daha yüksek sıralanır)
- Sütun ağırlığı (başlık > içerik)
Sonuçlar sıralama düzeninde döndürülür (en alakalı önce).
Performans
| İşlem | Gecikme |
|---|---|
| 100 bellek arama | < 5ms |
| 1.000 bellek arama | < 10ms |
| 10.000 bellek arama | < 25ms |
| 100.000 bellek arama | < 100ms |
FTS5, okuma ağırlıklı iş yükleri için yüksek oranda optimize edilmiştir.
Sınırlamalar
Kök ayırma (Stemming)
FTS5 varsayılan olarak kök ayırma yapmaz. "running" ve "run" farklı terimlerdir.
Geçici çözüm: Ön ek eşleştirme kullanın: ?q=run*
Yazım hatası toleransı
FTS5 bulanık eşleştirme desteklemez. Bir yazım hatası sonuç döndürmez.
Geçici çözüm: Kavramsal eşleştirme için anlamsal arama (/memory/semantic-search) kullanın.
Durum kelimeleri (Stop words)
Yaygın kelimeler (the, a, an, is) indekslenir ama arama için yararlı olmayabilir. FTS5 bunu otomatik olarak ele alır.
FTS5 ve Anlamsal Arama
| Yön | FTS5 | Anlamsal Arama |
|---|---|---|
| Hız | Milisaniyenin altında | 50-100ms |
| Eşleştirme | Tam anahtar kelimeler | Kavramsal |
| Yazım hatası toleransı | Yok | Bazı |
| Kök ayırma | Yok | Örtük |
| Gömme gerektirir | Hayır | Evet |
| En uygun | Belirli terimler | Kavramlar |
Anahtar kelimeleri bildiğinizde FTS5 kullanın. X'in farklı şekilde tanımlandığı "X hakkındaki bellekler" istediğinizde anlamsal arama kullanın.