सूचकांक

Qdrant की एक मुख्य विशेषता यह है कि यह वेक्टर सूचक और पारंपरिक सूचक का प्रभावी संयोजन करता है। यह महत्वपूर्ण है क्योंकि केवल एक वेक्टर सूचक होने पर फ़िल्टरिंग शर्तों के तहत प्रभावी वेक्टर खोज सक्षम नहीं होता है। सरल शब्दों में, वेक्टर सूचक वेक्टर खोज को तेजी से बढ़ाता है, जबकि पेलोड सूचक फ़िल्टरिंग को तेज करता है।

अनुच्छेद के भीतर सूचक स्वतंत्र रूप से मौजूद होता है, लेकिन सूचक खुद के पैरामीटर पूरे सेट के लिए कॉन्फ़िगर किए जाते हैं।

हर अनुच्छेद के पास स्वचालित रूप से सूचक नहीं होता है। यह अनुकूलन सेटिंग्स की आवश्यकताओं पर निर्भर करता है और सामान्य रूप से स्टोर किए गए बिंदुओं की संख्या पर निर्भर करता है।

पेलोड सूचक

Qdrant में पेलोड सूचक एक पारंपरिक दस्तावेज-अनुक्रमित डेटाबेस में सूचक के समान होता है। इस सूचक को विशेष क्षेत्रों और प्रकारों के लिए निर्माण किया जाता है, और उसका उपयोग संबंधित फ़िल्टर शर्तों के आधार पर बिंदुओं को तेजी से पुनः प्राप्त करने के लिए किया जाता है।

यह भी विशेष रूप से अनुमानित करने के लिए उपयोग किया जाता है कि फ़िल्टरिंग शर्तों की गणना को, जो प्रश्न योजना को खोजने के लिए खोज रणनीतियाँ चुनने में मदद करता है।

सूचक बनाने के लिए अतिरिक्त गणनात्मक संसाधनों और स्मृति की आवश्यकता होती है, इसलिए महत्वपूर्ण है कि सूचित फ़ील्ड को ध्यानपूर्वक चुना जाए। Qdrant इस चयन को आपके लिए नहीं करता है, बल्कि इसे उपयोगकर्ता को सौंपता है।

फ़ील्ड को सूचक बनाने के लिए, निम्नलिखित विधि का उपयोग किया जा सकता है:

PUT /collections/{collection_name}/index

{
    "field_name": "सूचक बनाने वाले फ़ील्ड का नाम",
    "field_schema": "कीवर्ड"
}

उपलब्ध फ़ील्ड प्रकार हैं:

  • कीवर्ड - कीवर्ड पेलोड के लिए, फ़िल्टरिंग शर्तों को प्रभावित करने के लिए।
  • पूर्णांक - पूर्णांक पेलोड के लिए, मैचिंग और सीमा फ़िल्टरिंग शर्तों को प्रभावित करने के लिए।
  • फ़्लोट - फ़्लोट पेलोड के लिए, सीमा फ़िल्टरिंग शर्तों को प्रभावित करने के लिए।
  • बूल - बूलियन पेलोड के लिए, मैचिंग फ़िल्टरिंग शर्तों को प्रभावित करने के लिए (1.4.0 संस्करण के बाद उपलब्ध है)।
  • ज्यो - भौगोलिक पेलोड के लिए, भौगोलिक बाउंडिंग बॉक्स और भौगोलिक त्रिज्या फ़िल्टरिंग शर्तों को प्रभावित करने के लिए।
  • पाठ - विशेष सूचक प्रकार जो कीवर्ड/स्ट्रिंग पेलोड के लिए उपयुक्त है, पूर्ण-पाठ खोज फ़िल्टर शर्तों को प्रभावित करने के लिए।

पेलोड सूचक अधिक स्मृति का उपयोग कर सकते हैं, इसलिए सिफारिश की जाती है कि केवल वे फ़ील्ड होते हैं जो फ़िल्टरिंग शर्तों में उपयोग होते हैं। यदि आपको कई फ़ील्डों पर आधारित फ़िल्टर करने की आवश्यकता है, और स्मृति सीमाएँ सभी उन्हें सूचक बनाने की अनुमति नहीं देती हैं, तो सिफारिश की जाती है कि वे फ़ील्ड चुने जाएं जो सबसे अधिक खोज परिणामों को सीमित करते हैं। सामान्यत:, जितने अधिक अद्वितीय मूल्य एक पेलोड मान के पास होते हैं, उतना ही प्रभावी रूप से सूचक उपयोग होगा।

पूर्ण पाठ सूचक

संस्करण 0.10.0 से उपलब्ध

Qdrant स्ट्रिंग पेलोड के लिए पूर्ण-पाठ खोज का समर्थन करता है। पूर्ण-पाठ सूचक आपको शब्दों या वाक्यों की मौजूदगी के आधार पर बिंदुओं को फ़िल्टर करने की अनुमति देता है।

पूर्ण-पाठ सूचक को कॉन्फ़िगर करना थोड़ा जटिल होता है क्योंकि आप टोकेनाइज़ेशन पैरामीटर निर्दिष्ट कर सकते हैं। टोकेनाइज़ेशन एक प्रक्रिया होती है जो एक स्ट्रिंग को टोकन में विभाजित करने और फिर इन टोकनों को एक उल्टी इंडेक्स में इंडेक्स करने की प्रक्रिया होती है।

पूर्ण-पाठ सूचक बनाने के लिए, आप निम्नलिखित विधि का उपयोग कर सकते हैं:

PUT /collections/{collection_name}/index

{
    "field_name": "सूचक बनाने वाले फ़ील्ड का नाम",
    "field_schema": {
        "type": "पाठ",
        "tokenizer": "शब्द",
        "min_token_len": 2,
        "max_token_len": 20,
        "lowercase": true
    }
}

उपलब्ध टोकेनाइज़ेशन विधियां हैं:

  • शब्द - इसके आधार पर स्ट्रिंग को अल्पविराम, विराम चिह्न और विशेष चरों के आधार पर अलग करता है।
  • शवेटस्पेस - इसके आधार पर स्ट्रिंग को अल्पविराम के आधार पर अलग करता है।
  • प्रीफिक्स - इसके आधार पर स्ट्रिंग को अल्पविराम, विराम चिह्न और विशेष चरों के आधार पर अलग करता है, और फिर हर शब्द के लिए एक प्रीफिक्स सूचक बनाता है। उदाहरण के लिए, हेल्लो को , हे, हेल, हेल्ल, हेल्लो के रूप में इंडेक्स कर दिया जाएगा।
  • बहुभाषी - charabia पैकेज पर आधारित एक विशेष प्रकार की टोकेनाइज़ेशन है। इसका सही टोकेनाइज़ेशन और बहुभाषी लेखन की प्रक्रिया को समर्थन करता है, जिसमें गैर-लैटिन वर्णमाला और लेखनक अलग करनेवाली भाषाएँ शामिल हैं। समर्थित भाषाओं और सामान्यीकरण विकल्पों की पूरी सूची के लिए charabia दस्तावेज़ीकरण का संदर्भ लें। डिफ़ॉल्ट बिल्ड कॉन्फ़िगरेशन में, qdrant शामिल बाइनरी फ़ाइलों के आकार को बढ़ा देगा, इसलिए सभी भाषाओं का समर्थन नहीं करता है। चीनी, जापानी, और कोरियन् डिफ़ॉल्ट रूप से सक्षम नहीं हैं, लेकिन आप qdrant को `--features multiling

वेक्टर इंडेक्सिंग

वेक्टर इंडेक्सिंग एक डेटा संरचना है जो वेक्टर पर आधारित है, जो विशेष गणितीय मॉडल्स के माध्यम से निर्मित होती है। वेक्टर इंडेक्सिंग के साथ, हम लक्षित वेक्टर के समान प्रभावी ढंग से कई वेक्टर का क्वेरी कर सकते हैं।

वर्तमान में, Qdrant केवल वेक्टर इंडेक्स के रूप में HNSW का उपयोग करता है।

HNSW (हायरार्किकल नैविगेबल स्मॉल वर्ल्ड ग्राफ) एक ग्राफ-आधारित इंडेक्सिंग एल्गोरिदम है। निश्चित नियमों के अनुसार, यह ग्राफ के लिए एक बहु-स्तरीय नेविगेशन संरचना निर्माण करता है। इस संरचना में, ऊपर के स्तर अपूर्ण होते हैं, नोड के बीच अधिक दूरी होती है। नीचे के स्तर घना होता है, नोड के बीच छोटी दूरी होती है। खोज ऊपर से शुरू होती है, लक्ष्य के निकटतम नोड को उस स्तर में खोजते हैं, और फिर एक और खोज के लिए अगले स्तर में प्रवेश करते हैं। कई बारीकियों के बाद, यह तेजी से लक्ष्य स्थिति के पास आ सकता है।

प्रदर्शन सुधार के लिए, HNSW नोडों के प्रत्येक स्तर पर ग्राफ की अधिकतम डिग्री को m से सीमित करता है। इसके अलावा, आप ef_construct (इंडेक्स निर्माण के दौरान) या ef (लक्ष्य की खोज के दौरान) का उपयोग करके खोज सीमा को निर्धारित कर सकते हैं।

इन पैरामीटरों को कॉन्फ़िगर किया जा सकता है कॉन्फ़िगरेशन फ़ाइल में:

storage:
  hnsw_index:
    m: 16
    ef_construct: 100
    full_scan_threshold: 10000

संग्रह निर्माण प्रक्रिया के दौरान, ef पैरामीटर को कॉन्फ़िगर किया जा सकता है और यह डिफ़ॉल्ट रूप में ef_construct के बराबर होता है।

HNSW को कई कारणों से चुना गया था। पहले तो, HNSW को क्वेरी प्रक्रिया के दौरान फ़िल्टरों को संशोधित करने की अनुमति देने के साथ अधिक संगत है। दूसरे, सार्वजनिक माप टाकी के अनुसार, यह सबसे सटीक और तेज़ एल्गोरिदमों में से एक है।

वर्जन v1.1.1 से उपलब्ध

HNSW पैरामीटर भी hnsw_config को सेट करके संग्रह और नामी वेक्टर्स के लिए खोज प्रदर्शन को अनुकूलित करने के लिए ध्यानपूर्वक समायोजित किया जा सकता है।

फ़िल्टरेबल इंडेक्स

अलग पेरेटाइनडेक्टर इंडेक्स और केवल वेक्टर इंडेक्स से एकान्तरिक संकेत के लिए पूरी तरह पर्याप्त नहीं हो सकते।

जिन मामलों में संकेत कमजोर होते हैं, वहां HNSW इंडेक्स सीधे उपयोग किया जा सकता है। जब संकेत सख्त होते हैं, पेरेटाइन्डेक्टर इंडेक्स का उपयोग किया जा सकता है और पूरी तरह से पुनर्मूल्यांकित किया जा सकता है। हालांकि, बीच के मामलों में, यह दृश्यमान नहीं है।

एक ओर, हम बहुत से वेक्टर पर पूर्ण स्कैन करने की सहायता नहीं कर सकते। दूसरी ओर, बहुत सख्त फ़िल्टरों का उपयोग करते समय, HNSW ग्राफ टूटने लगता है।

अतिरिक्त एज़ आपको HNSW इंडेक्स का उपयोग करके निकटतम वेक्टर्स की खोज करने और ग्राफ में खोज करते समय फ़िल्टर लागू करने की संभावना देते हैं।

यह दृष्टिकोण स्थितियों के अधीन शर्तों की गणना करने की ओर अतिरिक्त लोड को कम करता है, क्योंकि आपको खोज में भाग लेने वाले बिंदुओं के लिए केवल छोटे हिस्से के लिए शर्तों की गणना करनी होती है।