वेक्टर समानता खोज

इस विषय में बताया गया है कि Milvus में संप्रेषिता खोज कैसे की जाती है।

Milvus में वेक्टर समानता खोज वहां के बीच की दुरी की गणना करता है और संग्रह में वेक्टर के बीच सबसे समान परिणाम लौटाता है। आप यह भी कर सकते हैं कि आपके द्वारा बनाए गए बूलियन अभिव्यक्ति को निर्दिष्ट करके संख्यात्मक क्षेत्रों या प्राथमिक कुंजी क्षेत्रों को फ़िल्टर करें।

निम्नलिखित उदाहरण में दिखाया गया है कि वेक्टर समानता खोज को कैसे 2000 पंक्तियों के एक डेटासेट पर किया जाता है, जिसमें (प्राइमरी कुंजी) बुक आईडी, शब्द संख्या (स्केलर क्षेत्र) और बुक विवरण (वेक्टर क्षेत्र) शामिल हैं। इससे खोज की याेजना याोग संदर्भ की जैसे बुक का चयन करें तो उसके बासर वेक्टराइज़ विवरण हो। Milvus आपकी परिभाषित क्यूरी वेक्टर और खोज पैरामीटर्स पर आधारित सबसे समान परिणाम लौटाएगा।

संग्रह लोड करें

वेक्टर समानता खोज करने से पहले, Milvus सभी खोज और क्वेरी कार्रवाइयों को मेमोरी में निर्वाहित करता है। कृपया वेक्टर समानता खोज करने से पहले संग्रह को मेमोरी में लोड करें।

err := milvusClient.LoadCollection(
  context.Background(),   // ctx
  "book",                 // CollectionName
  false                   // async
)
if err != nil {
  log.Fatal("failed to load collection:", err.Error())
}

खोज पैरामीटर तैयार करें

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

sp, _ := entity.NewIndexIvfFlatSearchParam( // NewIndex*SearchParam func
    10,                                  // searchParam
)

opt := client.SearchQueryOptionFunc(func(option *client.SearchQueryOption) {
    option.Limit = 3
    option.Offset = 0
    option.ConsistencyLevel = entity.ClStrong
    option.IgnoreGrowing = false
})
पैरामीटर विवरण विकल्प
NewIndex*SearchParam func विभिन्न इंडेक्स प्रकारों के आधार पर entity.SearchParam बनाने के लिए फ़ंक्शन। Float Vectors के लिए: - NewIndexFlatSearchParam() (FLAT) - NewIndexIvfFlatSearchParam(nprobe int) (IVF_FLAT) - NewIndexIvfSQ8SearchParam(nprobe int) (IVF_SQ8) - NewIndexIvfPQSearchParam(nprobe int) (RNSG) - NewIndexHNSWSearchParam(ef int) (HNSW) बाइनरी वेक्टर्स के लिए: - NewIndexBinFlatSearchParam(nprobe int) (BIN_FLAT) - NewIndexBinIvfFlatSearchParam(nprobe int) (BIN_IVF_FLAT)
sp पिछले फ़ंक्शन द्वारा वापस लौटाए गए इंडेक्स-विशिष्ट खोज पैरामीटर। विवरण के लिए वेक्टर इंडेक्स देखें।
opt ANN खोज के लिए विकल्प। - Limit: लौटने वाली इकाइयों की संख्या का निर्धारण करें। - Offset: खोज के दौरान छोड़ने की जानेवाली इकाइयों की संख्या का निर्धारण करें। इस पैरामीटर और Limit का योग होना चाहिए 16384 से कम। उदाहरण के लिए, यदि आप किसी वेक्टर के 9वें और 10वें नजदीकी पड़ोसीयों को क्वेरी करना चाहते हैं, तो Limit को 2 और Offset को 8 सेट करें। - ConsistencyLevel: खोज के दौरान लागू होने वाले संगतता स्तर का निर्धारण करें। - Ignore Growing: समानता खोज में बढ़ रहे सेगमेंट्स को नजरअंदाज़ करने की बताए कि क्या है। डिफ़ॉल्ट मूल्य False है, जो इसका इशारा करता है कि खोज में बढ़ रहे सेगमेंट्स शामिल हैं।

वेक्टर खोज करें

मिलवस का उपयोग करके वेक्टर खोज करें। किसी विशिष्ट विभाजन में खोजने के लिए, कृपया विभाजन नाम सूची निर्दिष्ट करें।

मिलवस, खोज के लिए सहमति स्तर को सेट करने का समर्थन करता है। इस विषय में दिए गए उदाहरण में सहमति स्तर को मजबूत पर सेट किया गया है। आप सहमति स्तर को मर्यादित, सत्र, या अंततः पर भी सेट कर सकते हैं। मिलवस में चार सहमति स्तरों के बारे में अधिक जानकारी के लिए, Consistency देखें।

searchResult, err := milvusClient.Search(
    context.Background(),                    // ctx
    "book",                                  // CollectionName
    []string{},                              // partitionNames
    "",                                      // expr
    []string{"book_id"},                     // outputFields
    []entity.Vector{entity.FloatVector([]float32{0.1, 0.2})}, // vectors
    "book_intro",                            // vectorField
    entity.L2,                               // metricType
    10,                                      // topK
    sp,                                      // sp
    opt,
)
if err != nil {
    log.Fatal("Failed to search collection:", err.Error())
}
पैरामीटर विवरण विकल्प
ctx API कॉल प्रक्रिया को नियंत्रित करने के लिए प्रयोग की गई संदर्भ N/A
CollectionName लोड किया जाने वाले संग्रह का नाम N/A
partitionNames लोड किए जाने वाले विभाजनों की सूची। यदि खाली है, तो सभी विभाजनों को खोजें N/A
expr गुणीय गुणों को फ़िल्टर करने के लिए बूलीयन व्यक्ति विस्तृत जानकारी के लिए बूलीयन व्यक्ति नियम देखें
output_fields वापस लाने के लिए क्षेत्रों के नाम N/A
vectors खोजने के लिए वेक्टर N/A
vectorField खोजने के लिए क्षेत्र का नाम N/A
metricType खोज के लिए प्रयोग की जाने वाली मैट्रिक प्रकार यह पैरामीटर निर्माण सूची करने के लिए उपयोग की जाने वाली मैट्रिक प्रकार के रूप में होना चाहिए
topK वापस लाने के लिए परिणामों की संख्या। इस मान की और opts में offset की जोड़ परिणामतः 16384 से कम होनी चाहिए N/A
sp सूची विशेष entity.SearchParam N/A

सबसे समान वेक्टरों के मुख्य कुंजी मान और दूरियों की जांच कीजिए।

fmt.Printf("%#v\n", searchResult)
for _, sr := range searchResult {
    fmt.Println(sr.IDs)
    fmt.Println(sr.Scores)
}

खोज पूरी होने के बाद, मिलवस में लोड किए जाने वाले संग्रह को मेमोरी खपत को कम करने के लिए रिलीज़ करें।

err := milvusClient.ReleaseCollection(
    context.Background(),                            // ctx
    "book",                                          // CollectionName
)
if err != nil {
    log.Fatal("Failed to release collection:", err.Error())
}

सीमाएँ

सुविधा अधिकतम सीमा
संग्रह का नाम लंबाई 255 अक्षर
संग्रह में विभाजनों की संख्या 4,096
संग्रह में क्षेत्रों की संख्या 256
संग्रह में शार्ड्स की संख्या 256
वेक्टरों की आयामिकता 32,768
शीर्ष K 16,384
लक्ष्य इनपुट वेक्टरों की संख्या 16,384

मिश्रित खोज करना

मिश्रित खोज मूल रूप से विशेषता फ़िल्टरिंग के साथ वेक्टर खोज है। बूलीयन व्यक्ति की निर्दिष्टि से स्कैलर क्षेत्रों या प्राइमरी कुंजी क्षेत्रों को फ़िल्टर करके, आप विशिष्ट स्थितियों के आधार पर खोज को सीमित कर सकते हैं।

निम्नलिखित उदाहरण में यह दिखाया गया है कि कैसे मामूली वेक्टर खोज के आधार पर मिश्रित खोज को कैसे किया जाता है। मान लीजिए आप विशिष्ट पुस्तकों की खोज करना चाहते हैं जो पुस्तकों की जा रही परिचय के वेक्टरीकरण के आधार पर होती है, लेकिन केवल विशिष्ट शब्दों की गिनती सीमा के भीतर पुस्तकों को पुनः प्राप्त करना चाहते हैं। फिर आप खोज पैरामीटर में एक बूलियान व्यक्ति निर्दिष्टि द्वारा word_count <= 11000 को फ़िल्टर कर सकते हैं। मिलवस केवल मुहरियों के भीतर हो संबंधित पार वाले वेक्टर की खोज करेगा।

sp, _ := entity.NewIndexFlatSearchParam(
  10,
)

opt := client.SearchQueryOptionFunc(func(option *client.SearchQueryOption) {
    option.Limit = 3
    option.Offset = 0
    option.ConsistencyLevel = entity.ClStrong
    option.IgnoreGrowing = false
})

searchResult, err := milvusClient.Search(
  context.Background(),
  "book",
  []string{},
  "word_count <= 11000",
  []string{"book_id"},
  []entity.Vector{entity.FloatVector([]float32{0.1, 0.2})},
  "book_intro",
  entity.L2,
  2,
  sp,
  opt,
)

if err != nil {
  log.Fatal("Failed to search collection:", err.Error())
}

वापस आए रिजल्ट्स की जाँच करें।

fmt.Printf("%#v\n", searchResult)
for _, sr := range searchResult {
  fmt.Println(sr.IDs)
  fmt.Println(sr.Scores)
}