वेक्टर इंडेक्स तैयार करना

इस गाइड में बताया गया है कि Milvus में वेक्टर इंडेक्स कैसे तैयार किया जाए।

वेक्टर इंडेक्स एक मेटाडेटा संगठन इकाई होती है जो वेक्टर समानता खोज को तेज करने के लिए उपयोग की जाती है। वेक्टर्स पर इंडेक्स न तैयार करने पर, Milvus एक ब्रूट-फोर्स खोज करेगा।

डिफ़ॉल्ट रूप से, Milvus 1,024 से कम पंक्तियों वाले सेगमेंट्स पर इंडेक्स नहीं बनाता है।

निम्नलिखित उदाहरण में दिखाया गया है कि कैसे यूक्लिडियन दूरी (L2) का प्रयोग करते हुए 1024 क्लस्टर्स के साथ IVF_FLAT इंडेक्स तैयार किया जा सकता है। आप वह इंडेक्स और मैट्रिक प्रकार चुन सकते हैं जो आपके स्थिति के अनुकूल हो।

इंडेक्स पैरामीटर तैयार करें

इंडेक्स पैरामीटर्स को तैयार करने के लिए निम्नलिखित कदमों का पालन करें:

index_params = {
  "metric_type":"L2",
  "index_type":"IVF_FLAT",
  "params":{"nlist":1024}
}
पैरामीटर विवरण विकल्प
metric_type वेक्टर समानता मापन के लिए प्रयोग किया जाने वाले मेट्रिक का प्रकार फ्लोटिंग-पॉइंट वेक्टर के लिए:- L2 (यूक्लिडियन दूरी)- IP (आंतरिक गुण)- COSINE (कोसाइन समानता)बाइनरी वेक्टर के लिए:- JACCARD (जैकर्ड दूरी)- HAMMING (हामिंग दूरी)
index_type वेक्टर खोज को तेज करने के लिए प्रयोग किया जाने वाले इंडेक्स का प्रकार फ्लोटिंग-पॉइंट वेक्टर के लिए:- FLAT (FLAT)- IVF_FLAT (IVF_FLAT)- IVF_SQ8 (IVF_SQ8)- IVF_PQ (IVF_PQ)- GPU_IVF_FLAT* (GPU_IVF_FLAT)- GPU_IVF_PQ*> (GPU_IVF_PQ)- HNSW (HNSW)- DISKANN* (DISKANN)बाइनरी वेक्टर के लिए:- BIN_FLAT (BIN_FLAT)- BIN_IVF_FLAT (BIN_IVF_FLAT)
params इंडेक्स के लिए विशेष निर्माण पैरामीटर अधिक जानकारी के लिए, "मेमोरी में और डिस्क पर इंडेक्सिंग" देखें
  • DISKANN कुछ पूर्वशर्तों को पूरा करना चाहिए। अधिक जानकारी के लिए, "डिस्क पर इंडेक्सिंग" देखें।
  • GPU_IVF_FLAT और GPU_IVF_PQ केवल उन Milvus स्थापनाओं में उपलब्ध है जिनमें GPU समर्थन सक्षम किया गया है।

इंडेक्स तैयार करें

इंडेक्स तैयार करने के लिए वेक्टर फ़ील्ड का नाम और इंडेक्स पैरामीटर्स को निर्दिष्ट करके इसे तैयार करें।

from pymilvus import Collection, utility
collection = Collection("book")
collection.create_index(
  field_name="book_intro",
  index_params=index_params
)

utility.index_building_progress("book")

पैरामीटर विवरण
field_name उस वेक्टर फ़ील्ड का नाम जिस पर इंडेक्स तैयार करना है।
index_params तैयार करने के लिए इंडेक्स के पैरामीटर्स

स्कैलर इंडेक्स तैयार करना

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

Milvus v2.1.0 से शुरू होकर, हाइब्रिड खोजों में विशेषता फिल्टरिंग को तेज करने के लिए, आप स्कैलर फ़ील्ड्स पर इंडेक्स तैयार कर सकते हैं। आप यहाँ इस लिंक पर स्कैलर फ़ील्ड इंडेक्सिंग के बारे में और अधिक पढ़ सकते हैं।

नोट: "यहाँ" के लिंक को मूल दस्तावेज़ में निर्दिष्ट वास्तविक लिंक से बदल देना चाहिए।

इंडेक्स तैयार करना

स्कैलर फ़ील्ड पर इंडेक्स तैयार करते समय, आपको किसी भी इंडेक्स पैरामीटर्स को सेट करने की आवश्यकता नहीं है। स्कैलर फ़ील्ड के इंडेक्स का डिफ़ॉल्ट नाम default_idx है, जिसके बाद इंडेक्स किए गए फ़ील्ड का नाम होता है। यदि आप चाहें, तो आप इसे अन्य उपयुक्त मानों पर सेट कर सकते हैं।

निम्नलिखित कोड स्निपेट मानता है कि एक संग्रह "book" का मौजूदा होना चाहिए और एक इंडेक्स को स्ट्रिंग फ़ील्ड book_name पर बनाया जाना चाहिए।

from pymilvus import Collection

collection = Collection("book")   
collection.create_index(
  field_name="book_name", 
  index_name="scalar_index",
)
collection.load()

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

search_param = {
  "data": [[0.1, 0.2]],
  "anns_field": "book_intro",
  "param": {"metric_type": "L2", "params": {"nprobe": 10}},
  "limit": 2,
  "expr": "book_name like \"Hello%\"", 
}
res = collection.search(**search_param)

इंडेक्स हटाना

from pymilvus import Collection
collection = Collection("book")      # मौजूदा संग्रह लें।
collection.drop_index()