ویکٹر مماثلت تلاش

یہ موضوع ملوس میں انٹٹی سرچ کرنے کا طریقہ بیان کرتا ہے۔

ملوس میں ویکٹر مماثلت تلاش، سوال ویکٹر اور کلیکشن میں ویکٹروں کے درمیان فاصلے کا حساب لگاتا ہے اور سب سے مماثل نتائج واپس کرتا ہے۔ آپ بوسے کے فیلڈ یا پرائمری کی فیلڈ کو فلٹر کرنے کے لئے ایک بولین ایکسپریشن کا تعین بھی کرسکتے ہیں۔

نیچے دی گئی مثال میں 2000 رو، بک آئی ڈیز (پرائمری کی)، ورڈ فریکوئنسی (سکیلر فیلڈ)، اور بک کی تفصیلات (ویکٹر فیلڈ) سے مشتمل ڈیٹا سیٹ پر ویکٹر مماثلت تلاش کرنے کا طریقہ دکھایا گیا ہے۔ یہ وہ وضاحت ہے جو ویکٹرائزڈ تفصیلات کے بنا پر مخصوص کتابوں کی تلاش سناریو کو نمائش دیتی ہے۔ ملوس آپ کے تعینات کے مطابق کوئری ویکٹر اور تلاش پیرامیٹر کی بنیاد پر سب سے مماثل نتائج واپس کرے گا۔

کلیکشن لوڈ کریں

ویکٹر مماثلت تلاش کرنے سے پہلے ملوس تمام تلاش اور کوئری کارروائیاں میموری میں اجراء کرتا ہے۔ براہ کرم ویکٹر مماثلت تلاش کرنے سے پہلے کلیکشن کو میموری میں لوڈ کریں۔

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

تیاری تلاش پیرامیٹرز

اپنے تلاش سینریو کے لئے مناسب پیرامیٹرز تیار کریں۔

ذیل مثال میں فاصلے کا حساب لگانے اور IIV_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 بنانے والا فنکشن۔ مثلاً برائے فلاٹ ویکٹرز: - 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: تلاش کے دوران چھوڑنے کی انٹٹیز کی تعداد کا تعین کریں۔ یہ پیرامیٹر اور الحاق کا جمع 16384 سے کم ہونا چاہئے۔ مثال کے طور پر، اگر آپ ویکٹر کے 9ویں اور 10ویں قریبی پڑوسیوں کو کوئری کرنا چاہتے ہیں، تو لمت کو 2 اور آفسیٹ کو 8 کریں۔ - ConsistencyLevel: تلاش کے دوران لاگو کرنے کے لئے یکسانتا سطح کا تعین کریں۔ - Ignore Growing: شباہ پیدا ہونے والے سیگمنٹس کو تلاش میں نظرانداز کرنے کے لئے بتاتا ہے۔ اصل قیمت False ہے، جو ظاہر کرتی ہے کہ تلاش میں شباہ پیدا ہو رہے ہیں۔

ویکٹر تلاش کریں

ملوس کا استعمال کرتے ہوئے ویکٹر تلاش کریں۔ کسی خاص پارٹیشن میں تلاش کرنے کے لئے، براہ کرم پارٹیشن کے نام کی فہرست مختص کریں۔

ملوس کو تلاش کے لئے ایک مستقل سطح تعینات کرنے کی حمایت ہوتی ہے۔ اس موضوع میں دیئے گئے مثال میں، مستقل سطح کو مضبوط پر تعین کیا گیا ہے۔ آپ چاروں مستقل سطحوں کو محدود، سیشن، یا آخر میں پر تعین کرسکتے ہیں۔ ملوس میں چار مستقل سطحوں کی تفصیل کے لئے، مستقل سطحوں دیکھیں۔

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
اوپ کے لۓ 16,384
مواصلت کے ليے نشان مند داخلے ویکٹرز کی تعداد 16,384

مخلوط تلاش کرنا

مختلط تلاش بنیادی طور پر ایک ویکٹر تلاش ہے جس میں خاص خصوصیات فلٹر کرنے کا وصف شامل ہے۔ عینی فیلڈ یا پراہمری کلید فیلڈز کو فلٹر کرنے کے لئے بولین اظہار کا تعین کرتے ہوئے، آپ مخصوص شرائط پر بنیاد پر تلاش محدود کر سکتے ہیں۔

نیچے دی گئی مثال میں، مختلط تلاش کو عام ویکٹر تلاش کی بنیاد پر کیسے انجام دیا جاتا ہے دکھایا گیا ہے۔ مان لیں کہ آپ ویکٹرائز کردہ کتابوں کی معرفی پر کیسی کتب تلاش کرنا چاہتے ہیں، لیکن صرف ایک مخصوص لفظ کی تعداد کے رینج کے اندر کیتابوں کو حاصل کرنا چاہتے ہیں۔ پھر آپ تلاش پیرامیٹرز میں بولین اظہار کی تعینات کرکے word_count فیلڈ کو فلٹر کر سکتے ہیں۔ ملوس صرف ایسے ویکٹرز کی تلاش کرے گا جو اظہار کو مطمئن کرنے والے انٹیٹیز کے اندر ہیں۔

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)
}