# FTS5 फुल-टेक्स्ट खोज Synapse तेज़, लचीली मेमोरी खोज के लिए FTS5 (Full-Text Search 5) का उपयोग करता है। यह पृष्ठ बताता है कि यह कैसे काम करता है और इसे प्रभावी ढंग से कैसे उपयोग करें। ## FTS5 क्या है? FTS5 एक SQLite एक्सटेंशन है (एक्सटेंशन के माध्यम से PostgreSQL में भी उपलब्ध) जो फुल-टेक्स्ट खोज क्षमताएँ प्रदान करता है। यह: - तेज़ कीवर्ड खोज के लिए टेक्स्ट सामग्री अनुक्रमित करता है - बूलियन ऑपरेटर्स (AND, OR, NOT) का समर्थन करता है - उद्धरण चिह्नों के साथ वाक्यांश मिलान का समर्थन करता है - `*` के साथ उपसर्ग मिलान का समर्थन करता है - प्रासंगिकता द्वारा परिणामों को क्रमबद्ध करता है Synapse सभी मेमोरी सामग्री को अनुक्रमित करने के लिए FTS5 का उपयोग करता है, हज़ारों मेमोरीज़ में सब-मिलीसेकंड खोज सक्षम बनाता है। ## Synapse FTS5 का उपयोग कैसे करता है जब आप `POST /memory`: 1. मेमोरी सामग्री `memories` तालिका में संग्रहीत होती है 2. सामग्री FTS5 वर्चुअल तालिका में भी डाली जाती है 3. FTS5 स्वचालित रूप से सामग्री को टोकनाइज़ और अनुक्रमित करता है जब आप `GET /memory/search?q=...`: 1. Synapse FTS5 सिंटैक्स का उपयोग करके क्वेरी पार्स करता है 2. FTS5 इंडेक्स के विरुद्ध `MATCH` निष्पादित करता है 3. `mind_id` द्वारा फ़िल्टर करता है (टैनेंट आइसोलेशन) 4. क्रमबद्ध परिणाम लौटाता है ## क्वेरी सिंटैक्स ### सरल कीवर्ड खोज ``` ?q=docker ``` "docker" युक्त मेमोरीज़ लौटाता है। ### कई कीवर्ड्स (अंतर्निहित AND) ``` ?q=docker+swarm ?q=docker%20swarm ``` BOTH "docker" और "swarm" युक्त मेमोरीज़ लौटाता है। ### वाक्यांश मिलान ``` ?q="docker+swarm" ?q=%22docker%20swarm%22 ``` सटीक वाक्यांश "docker swarm" युक्त मेमोरीज़ लौटाता है। ### उपसर्ग मिलान ``` ?q=docker* ``` "docker" से शुरू होने वाले शब्दों वाली मेमोरीज़ लौटाता है (जैसे "dockers", "dockerfile", "dockerize")। ### बूलियन OR ``` ?q=docker+OR+kubernetes ``` "docker" OR "kubernetes" युक्त मेमोरीज़ लौटाता है। ### बूलियन NOT ``` ?q=docker+-swarm ?q=docker+NOT+swarm ``` "docker" लेकिन NOT "swarm" युक्त मेमोरीज़ लौटाता है। ### समूहीकरण ``` ?q=(docker+OR+kubernetes)+-test ``` "docker" या "kubernetes", लेकिन "test" नहीं युक्त मेमोरीज़ लौटाता है। ## व्यावहारिक उदाहरण ### किसी परियोजना के बारे में मेमोरीज़ खोजें ```bash curl -H "Authorization: Bearer YOUR_MIND_KEY" \ "https://synapse.schaefer.zone/memory/search?q=synapse+deployment" ``` ### सटीक वाक्यांश खोजें ```bash curl -H "Authorization: Bearer YOUR_MIND_KEY" \ "https://synapse.schaefer.zone/memory/search?q=%22docker+swarm%22" ``` ### परीक्षण मेमोरीज़ बहिष्कृत करें ```bash curl -H "Authorization: Bearer YOUR_MIND_KEY" \ "https://synapse.schaefer.zone/memory/search?q=production+-test" ``` ### तकनीक द्वारा खोजें ```bash curl -H "Authorization: Bearer YOUR_MIND_KEY" \ "https://synapse.schaefer.zone/memory/search?q=(postgres+OR+sqlite)+-mysql" ``` ## क्रमांकन FTS5 BM25 एल्गोरिथ्म का उपयोग करके प्रासंगिकता द्वारा परिणाम क्रमबद्ध करता है। कारक: - शब्द आवृत्ति (शब्द कितनी बार दिखाई देता है) - विपरीत दस्तावेज़ आवृत्ति (दुर्लभ शब्द उच्च क्रम के) - दस्तावेज़ लंबाई (शब्द वाले छोटे दस्तावेज़ उच्च क्रम के) - कॉलम भार (title > content) परिणाम क्रम क्रम में लौटाए जाते हैं (सबसे प्रासंगिक पहले)। ## प्रदर्शन | ऑपरेशन | विलंबता | |-----------|---------| | 100 मेमोरीज़ खोज | < 5ms | | 1,000 मेमोरीज़ खोज | < 10ms | | 10,000 मेमोरीज़ खोज | < 25ms | | 100,000 मेमोरीज़ खोज | < 100ms | FTS5 रीड-हेवी वर्कलोड के लिए अत्यधिक अनुकूलित है। ## सीमाएँ ### स्टेमिंग FTS5 डिफ़ॉल्ट रूप से स्टेमिंग नहीं करता। "running" और "run" भिन्न शब्द हैं। **समाधान:** उपसर्ग मिलान का उपयोग करें: `?q=run*` ### टाइपो सहिष्णुता FTS5 फ़ज़ी मिलान का समर्थन नहीं करता। टाइपो कोई परिणाम नहीं लौटाएगा। **समाधान:** वैचारिक मिलान के लिए सिमेंटिक खोज (`/memory/semantic-search`) का उपयोग करें। ### स्टॉप शब्द सामान्य शब्द (the, a, an, is) अनुक्रमित होते हैं लेकिन खोज के लिए उपयोगी नहीं हो सकते। FTS5 इसे स्वचालित रूप से संभालता है। ## FTS5 बनाम सिमेंटिक खोज | पहलू | FTS5 | सिमेंटिक खोज | |--------|------|-----------------| | गति | सब-मिलीसेकंड | 50-100ms | | मिलान | सटीक कीवर्ड्स | वैचारिक | | टाइपो सहिष्णुता | कोई नहीं | कुछ | | स्टेमिंग | कोई नहीं | अंतर्निहित | | Embeddings आवश्यक | नहीं | हाँ | | के लिए सर्वोत्तम | विशिष्ट शब्द | अवधारणाएँ | जब आप कीवर्ड्स जानते हैं तब FTS5 का उपयोग करें। जब आप "X के बारे में मेमोरीज़" चाहते हैं जहाँ X अलग ढंग से वर्णित है तब सिमेंटिक खोज का उपयोग करें। ## सर्वोत्तम प्रथाएँ > [!TIP] > - **विशिष्ट शब्दों का उपयोग करें** — "docker swarm" "container orchestration" से बेहतर है > - **वाक्यांशों को उद्धृत करें** — `"docker swarm"` वाक्यांश मिलान सुनिश्चित करता है > - **विविधताओं के लिए उपसर्ग का उपयोग करें** — `deploy*` "deploy", "deployment", "deploying" पकड़ता है > - **शोर बहिष्कृत करें** — `-test` परीक्षण मेमोरीज़ फ़िल्टर करता है > - **टैग्स के साथ संयोजित करें** — `?q=docker&tag=production` परिणाम संकरा करता है ## अगले कदम - [सिमेंटिक खोज](/docs/concepts/semantic-search) - [Memory API](/docs/api/memory) - [मेमोरी सर्वोत्तम प्रथाएँ](/docs/guides/memory-best-practices)