ভেক্টর সাদৃশ্য অনুসন্ধান

এই বিষয়বস্তুতে মিলভাসে একাধিকতা অনুসন্ধানের কৈদে কীভাবে কেন্দ্রিক বিষয়গুলি অনুসন্ধান করতে হয় তা প্রস্তুত করা হয়।

মিলভাসে ভেক্টর সাদৃশ্য অনুসন্ধান হল ধারার ভেক্টর এবং সংগ্রহের ভেক্টরগুলির মধ্যে দূরত্ব গণনা করে সবচেয়ে সাদৃশ ফলাফল ফেরত দেয়। আপনি স্কেলার ক্ষেত্র বা প্রাথমিক কী ক্ষেত্র ফিল্টার করার জন্য বুলিয়ান অভিব্যক্তি নির্দিষ্ট করে মিশিত অনুসন্ধানও করতে পারেন।

নীচের উদাহরণটি প্রদর্শিত করে দেয় যে, ২০০০ সারিতে ডেটাসেটে ভেক্টর সাদৃশ্য অনুসন্ধান কীভাবে করা হয়। এই ডেটাসেটে বই আইডি (প্রাথমিক কী), শব্দ সংখ্যা (স্কেলার ফিল্ড) এবং বই বর্ণনা (ভেক্টর ফিল্ড) থাকে। এটি বৈশিষ্ট্যিকভাবে ভেক্টরাইজড বর্ণনা ভিত্তি প্রদর্শন করার পরিস্থিতির সনাক্ত করতে। মিলভাস আপনার নির্ধারিত করা পরিস্থিতি ভিত্তিক অনুসন্ধান ভেক্টর এবং অনুসন্ধান পরামিতিতে সবচেয়ে সাদৃশ ফলাফল ফেরত দেবে।

সংগ্রহ লোড

ভেক্টর সাদৃশ্য অনুসন্ধান চালানোর আগে, মিলভাস সমস্ত অনুসন্ধান এবং প্রশ্ন সম্পাদনা মেমোরিতে করে। অনুসন্ধান চালানোর আগে অনুসন্ধান করার জন্য কালেকশনটি মেমোরিতে লোড করুন।

err := milvusClient.LoadCollection(
  context.Background(),   // ctx
  "book",                 // সংগ্রহের নাম
  false                   // async
)
if err != nil {
  log.Fatal("সংগ্রহ লোড করতে ব্যর্থ:", err.Error())
}

অনুসন্ধান প্রস্তুতি

আপনার অনুসন্ধান পরিস্থিতিতে উপযুক্ত প্যারামিটারগুলি প্রস্তুত করুন। নিম্নলিখিত উদাহরণটি দেখায় কিভাবে ইউক্লিডিয়ান দূরত্ব গণনা এবং IVF_FLAT সূচক দ্বারা নির্মিত দশটি কাছাকাছি ক্লাস্টার থেকে ভেক্টর পুনর্প্রাপ্তব করা হয় তা নির্দিষ্ট করা হয়।

sp, _ := entity.NewIndexIvfFlatSearchParam( // NewIndex*SearchParam ফাংশন
    10,                                  // searchParam
)

opt := client.SearchQueryOptionFunc(func(option *client.SearchQueryOption) {
    option.Limit = 3
    option.Offset = 0
    option.ConsistencyLevel = entity.ClStrong
    option.IgnoreGrowing = false
})
প্যারামিটার বর্ণনা অপশন
NewIndex*SearchParam ফাংশন বিভিন্ন সূচক প্রকারের উপর ভিত্তি করে 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: অনুসন্ধানের সময় অনুসন্ধানের সংখ্যা পার করা। এই প্যারামিটারের মোট + Limit কোনোও ১৬৩৮৪ থেকে কম হতে হবে। উদাহরণস্বরূপ, আপনি একটি ইচ্ছুক ভেক্টরের ৯ই এবং ১০ই সর্বনিকটা পর্যাপ্ত ছাড়াই অনুসন্ধান করতে চান, তাহলে Limit2 এবং Offset8 মান নির্ধারণ করুন। - ConsistencyLevel: অনুসন্ধানের সময় প্রযোজ্য সমগ্রতা স্তর নির্ধারণ করুন। - Ignore Growing: সাদৃশ্য অনুসন্ধানে চলাচল বৃদ্ধি এবং নতুন সংশোধনগুলির হিসাবে নিয়োগ করা কি না ইলোকেট করে। ডিফল্ট মান False হয়, যা সূচনামূলক মামলাগুলি নিয়োগ সম্পর্কে নিরাপদ।

ভেক্টর সন্ধান করুন

মিলভুস ব্যবহার করে ভেক্টর সন্ধান করুন। একটি নির্দিষ্ট পার্টিশনে সন্ধান করতে, দয়া করে পার্টিশন নামের তালিকা নির্দিষ্ট করুন।

মিলভুস সন্ধানের জন্য একটি স্থিতিতা স্তর সেট করা সমর্থন করে। এই বিষয়বস্তুর উদাহরণে স্থিতিতা স্তরকে স্ট্রং এ সেট করা হয়েছে। আপনি এই স্থিতিতা স্তরকে বাউন্ডেড, সেশন, অথবা ইভেন্টুয়ালি এ সেট করতে পারেন। মিলভুসে চারটি স্থিতিতা স্তরের বিস্তারিত তথ্যের জন্য, "Consistency" দেখুন।

searchResult, err := milvusClient.Search(
    context.Background(),                    // ctx
    "book",                                  // সংগ্রহের নাম
    []string{},                              // partitionNames
    "",                                      // expr
    []string{"book_id"},                     // আউটপুট ক্ষেত্রসমূহ
    []entity.Vector{entity.FloatVector([]float32{0.1, 0.2})}, // ভেক্টর
    "book_intro",                            // ভেক্টর ক্ষেত্র
    entity.L2,                               // মেট্রিক টাইপ
    10,                                      // শীর্ষK
    sp,                                      // sp
    opt,
)
if err != nil {
    log.Fatal("সংগ্রহ সন্ধান করতে ব্যর্থ:", err.Error())
}
প্যারামিটার বর্ণনা বিকল্প
ctx API কল প্রক্রিয়া নিয়ন্ত্রণ করতে ব্যবহৃত প্রসার বিদ্যমান নেই
CollectionName লোড করার জন্য সংগ্রহের নাম বিদ্যমান নেই
partitionNames লোড করার জন্য পার্টিশন নামের তালিকা। যদি ফাঁকা থাকে, সমস্ত পার্টিশনে অনুসন্ধান করুন বিদ্যমান নেই
expr বৈশিষ্ট্যগুলির জন্য বুলিয়ান অভিব্যক্তি বিস্তারিত তথ্যের জন্য বুলিয়ান অভিব্যক্তির নিয়ম দেখুন
output_fields ফিরে যে ক্ষেত্রগুলির নাম বিদ্যমান নেই
vectors অনুসন্ধান করার জন্য ভেক্টর বিদ্যমান নেই
vectorField অনুসন্ধান করার ক্ষেত্রের নাম বিদ্যমান নেই
metricType অনুসন্ধানে ব্যবহৃত মেট্রিক প্রকার এই প্যারামিটারটি অবশ্যই ইনডেক্স নির্মাণে ব্যবহৃত মেট্রিক প্রকারের মধ্যে একই হতে হবে
topK ফিরে নেওয়া ফলাফলের সংখ্যা। এই মানের মধ্যে উপস্থিত এবং opts এর offset এর যোগফল অবশ্যই 16384 এর কম হতে হবে বিদ্যমান নেই
sp ইনডেক্সফ্ল্যাটঃ ইনডেক্সফ্ল্যাটঃ ইনডেক্সফ্ল্যাটঃ ইনডেক্সফ্ল্যাটঃ ইনডেক্সফ্ল্যাটঃ ইনডেক্সফ্ল্যাটঃ ইনডেক্সফ্ল্যাটঃ ইনডেক্সফ্ল্যাটঃ ইনডেক্স বিদ্যমান নেই

সবসম্পূর্ণ রেজাল্ট এবং সবচেয়ে সম্মিলিত ভেক্টরের প্রাথমিক কী মান এবং দূরত্ব চেক করুন।

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

অনুসন্ধান সম্পন্ন হলে, মেমোরি ব্যয় কমাতে মিলভুসে লোড করা সংগ্রহ রিলিজ করুন।

err := milvusClient.ReleaseCollection(
    context.Background(),                            // ctx
    "book",                                          // সংগ্রহের নাম
)
if err != nil {
    log.Fatal("সংগ্রহ রিলিজ করতে ব্যর্থ হয়েছে:", err.Error())
}

সীমাবদ্ধতা

বৈশিষ্ট্য সর্বাধিক সীমা
সংগ্রহের নামের দৈর্ঘ্য 255 অক্ষর
সংগ্রহে বিভাজনের সংখ্যা 4,096
সংগ্রহে ক্ষেত্রের সংখ্যা 256
সংগ্রহে বিশেষ ধরনের সংখ্যা 256
ভেক্টরের মাত্রাত্মকতা 32,768
শীর্ষK 16,384
লক্ষ্যভিত্তিক ইনপুট ভেক্টরের সংখ্যা 16,384

মিশিত অনুসন্ধান পারফর্ম করা

মিশিত অনুসন্ধান প্রায়ই বৈশিষ্ট্যের ফিল্টারিং দ্বারা ভেক্টর অনুসন্ধান বিশিষ্টভাবে সীমিত করা একটি ভেক্টর অনুসন্ধান। বুলিয়ান অভিব্যক্তির মাধ্যমে স্কেলার ক্ষেত্র বা প্রাথমিক কী ক্ষেত্র ফিল্টারিং দ্বারা, আপনি নিশ্চিত শর্তানুযায়ী অনুসন্ধান সীমিত করতে পারেন।

নীচের উদাহরণে দেখা যাচ্ছে কিভাবে নির্দিষ্ট আদিবাসী সংখ্যা বৈশিষ্ট্যবিশেষে ভেক্টরাইজেড একটি বইর ভিত্তিতে মিশিত অনুসন্ধান সম্পাদন করা হয়েছে। আপনি বইগুলির ভেক্টরাইজেড ভূমিকা দ্বারা সম্পাদন করতে চান, কিন্তু শুধুমাত্র নির্দিষ্ট শব্দ গণনা সীমাবদ্ধ বই ফিরে এনক্রিপ্ট করতে চান। তাহলে আপনি অনুসন্ধান পরিমাণে বুলিয়ান অভিব্যক্তি নির্দিষ্ট করে ফিল্টার করতে পারেন। মিলভুস শুধুমাত্র এই অভিব্যক্তিকে মেলাতে অনুসন্ধান করবে।

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("সংগ্রহ সন্ধান করতে ব্যর্থ:", err.Error())
}

ফিরে আসা ফলাফলগুলি চেক করুন।

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