FTS5 फुल-टेक्स्ट खोज
Synapse SQLite FTS5 का उपयोग सब-मिलीसेकंड फुल-टेक्स्ट मेमोरी खोज के लिए कैसे करता है।
FTS5 फुल-टेक्स्ट खोज
Synapse तेज़, लचीली मेमोरी खोज के लिए FTS5 (Full-Text Search 5) का उपयोग करता है। यह पृष्ठ बताता है कि यह कैसे काम करता है और इसे प्रभावी ढंग से कैसे उपयोग करें।
FTS5 क्या है?
FTS5 एक SQLite एक्सटेंशन है (एक्सटेंशन के माध्यम से PostgreSQL में भी उपलब्ध) जो फुल-टेक्स्ट खोज क्षमताएँ प्रदान करता है। यह:
- तेज़ कीवर्ड खोज के लिए टेक्स्ट सामग्री अनुक्रमित करता है
- बूलियन ऑपरेटर्स (AND, OR, NOT) का समर्थन करता है
- उद्धरण चिह्नों के साथ वाक्यांश मिलान का समर्थन करता है
*के साथ उपसर्ग मिलान का समर्थन करता है- प्रासंगिकता द्वारा परिणामों को क्रमबद्ध करता है
Synapse सभी मेमोरी सामग्री को अनुक्रमित करने के लिए FTS5 का उपयोग करता है, हज़ारों मेमोरीज़ में सब-मिलीसेकंड खोज सक्षम बनाता है।
Synapse FTS5 का उपयोग कैसे करता है
जब आप POST /memory:
- मेमोरी सामग्री
memoriesतालिका में संग्रहीत होती है - सामग्री FTS5 वर्चुअल तालिका में भी डाली जाती है
- FTS5 स्वचालित रूप से सामग्री को टोकनाइज़ और अनुक्रमित करता है
जब आप GET /memory/search?q=...:
- Synapse FTS5 सिंटैक्स का उपयोग करके क्वेरी पार्स करता है
- FTS5 इंडेक्स के विरुद्ध
MATCHनिष्पादित करता है mind_idद्वारा फ़िल्टर करता है (टैनेंट आइसोलेशन)- क्रमबद्ध परिणाम लौटाता है
क्वेरी सिंटैक्स
सरल कीवर्ड खोज
?q=docker"docker" युक्त मेमोरीज़ लौटाता है।
कई कीवर्ड्स (अंतर्निहित AND)
?q=docker+swarm
?q=docker%20swarmBOTH "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" नहीं युक्त मेमोरीज़ लौटाता है।
व्यावहारिक उदाहरण
किसी परियोजना के बारे में मेमोरीज़ खोजें
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
"https://synapse.schaefer.zone/memory/search?q=synapse+deployment"सटीक वाक्यांश खोजें
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
"https://synapse.schaefer.zone/memory/search?q=%22docker+swarm%22"परीक्षण मेमोरीज़ बहिष्कृत करें
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
"https://synapse.schaefer.zone/memory/search?q=production+-test"तकनीक द्वारा खोजें
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 अलग ढंग से वर्णित है तब सिमेंटिक खोज का उपयोग करें।