# 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: 1. Bellek içeriği `memories` tablosunda saklanır 2. İçerik aynı zamanda FTS5 sanal tablosuna eklenir 3. FTS5 içeriği otomatik olarak tokenleştirir ve indeksler `GET /memory/search?q=...` yaptığınızda: 1. Synapse sorguyu FTS5 sözdizimi kullanarak ayrıştırır 2. FTS5 indeksine karşı bir `MATCH` yürütür 3. `mind_id'ye` göre filtreler (kiracı izolasyonu) 4. 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%20swarm ``` HEM "docker" HEM de "swarm" içeren bellekleri döndürür. ### Deyim eşleştirme ``` ?q="docker+swarm" ?q=%22docker%20swarm%22 ``` Tam "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 ```bash curl -H "Authorization: Bearer YOUR_MIND_KEY" \ "https://synapse.schaefer.zone/memory/search?q=synapse+deployment" ``` ### Tam deyimi bul ```bash curl -H "Authorization: Bearer YOUR_MIND_KEY" \ "https://synapse.schaefer.zone/memory/search?q=%22docker+swarm%22" ``` ### Test belleklerini hariç tut ```bash curl -H "Authorization: Bearer YOUR_MIND_KEY" \ "https://synapse.schaefer.zone/memory/search?q=production+-test" ``` ### Teknolojiye göre bul ```bash 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. ## En İyi Uygulamalar > [!TIP] > - **Belirli terimler kullanın** — "docker swarm", "container orchestration"dan iyidir > - **Deyimleri tırnak içine alın** — `"docker swarm"` deyim eşleşmesini sağlar > - **Varyasyonlar için ön ek kullanın** — `deploy*` "deploy", "deployment", "deploying" kelimelerini yakalar > - **Gürültüyü hariç tut** — `-test` test belleklerini filtreler > - **Etiketlerle birleştir** — `?q=docker&tag=production` sonuçları daraltır ## Sonraki Adımlar - [Anlamsal Arama](/docs/concepts/semantic-search) - [Memory API](/docs/api/memory) - [Bellek En İyi Uygulamaları](/docs/guides/memory-best-practices)