البحث عن التشابه في الناقل البرمجي
هذا الموضوع يقدم كيفية البحث عن الكيان في Milvus.
البحث عن التشابه الناقلي في Milvus يحسب المسافة بين ناقل الاستعلام والناقل في المجموعة، ويعيد أكثر النتائج تشابهًا. يمكنك أيضًا إجراء بحث مختلط عن طريق تحديد تعبير منطقي لتصفية الحقول العلمية أو حقول المفتاح الأساسي.
المثال التالي يوضح كيفية إجراء بحث عن التشابه الناقلي في مجموعة من 2000 صفًا، مكونة من معرفات الكتب (المفتاح الأساسي)، تكرار الكلمات (حقل علمي)، ووصف الكتب (حقل ناقل). يحاكي هذا السيناريو بحثًا عن الكتب المحددة بناءً على الوصف الناقل. ستعيد Milvus أكثر النتائج تشابهًا بناءً على ناقل الاستعلام المحدد ومعلمات البحث.
تحميل المجموعة
قبل إجراء بحث عن التشابه الناقلي، تقوم Milvus بتنفيذ جميع عمليات البحث والاستعلام في الذاكرة. يرجى تحميل المجموعة في الذاكرة قبل إجراء بحث عن التشابه الناقلي.
err := milvusClient.LoadCollection(
context.Background(), // ctx
"book", // CollectionName
false // async
)
if err != nil {
log.Fatal("فشل تحميل المجموعة:", 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 بناءً على أنواع فهارس مختلفة. |
للنوافذ العائمة: - 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 |
الخيارات للبحث القريب. | - Limit : حدد عدد الكيانات لإعادتها. - Offset : حدد عدد الكيانات التي يجب تخطيها أثناء البحث. يجب أن يكون مجموع هذه المعلمة وLimit أقل من 16384. على سبيل المثال، إذا كنت ترغب في الاستعلام عن الجيران الأقرب التاسع والعاشر لناقل، قم بتعيين Limit إلى 2 وOffset إلى 8 . - ConsistencyLevel : حدد مستوى الاتساق المطبق خلال البحث. - Ignore Growing : يشير ما إذا كان تجاهل القطاعات المتزايدة في البحث عن التشابه. القيمة الافتراضية هي False ، مما يشير إلى أن البحث يشمل القطاعات المتزايدة. |
القيام بعملية البحث النائب
قم بإجراء البحث النائب باستخدام Milvus. للبحث في قسم معين، يرجى تحديد قائمة أسماء الأقسام.
يدعم Milvus ضبط مستوى الاتساق لعمليات البحث. يقوم المثال في هذا الموضوع بضبط مستوى الاتساق إلى "قوي". يمكنك أيضًا ضبط مستوى الاتساق إلى "محصور"، "الجلسة"، أو "في النهاية". لمزيد من المعلومات حول أربعة مستويات اتساق في Milvus، انظر الاتساق.
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("فشل البحث في المجموعة:", err.Error())
}
القيمة | الوصف | الخيارات |
---|---|---|
ctx |
السياق المستخدم للتحكم في عملية استدعاء الواجهة البرمجية | غ/م |
CollectionName |
اسم المجموعة المراد تحميلها | غ/م |
partitionNames |
قائمة أسماء الأقسام المراد تحميلها. إذا كانت فارغة، يتم البحث في جميع الأقسام | غ/م |
expr |
التعبير المنطقي لفرز الخصائص | انظر إلى قواعد التعبير المنطقي للحصول على معلومات مفصلة |
output_fields |
أسماء الحقول المراد إرجاعها | غ/م |
vectors |
النواقيس المراد البحث عنها | غ/م |
vectorField |
اسم الحقل المراد البحث فيه | غ/م |
metricType |
نوع المقياس المستخدم للبحث | يجب أن يكون هذا المعلم نفس النوع المستخدم لبناء الفهرس |
topK |
عدد النتائج المراد إرجاعها. يجب أن يكون مجموع هذه القيمة و offset في opts أقل من 16384 |
غ/م |
sp |
entity.SearchParam محددة للفهرس |
غ/م |
تحقق من قيم المفتاح الأساسي والمسافات لأكثر النواقص المماثلة.
fmt.Printf("%#v\n", searchResult)
for _, sr := range searchResult {
fmt.Println(sr.IDs)
fmt.Println(sr.Scores)
}
بعد اكتمال البحث، قم بإطلاق المجموعة المحملة في Milvus لتقليل استهلاك الذاكرة.
err := milvusClient.ReleaseCollection(
context.Background(), // ctx
"book", // CollectionName
)
if err != nil {
log.Fatal("فشل إطلاق المجموعة:", err.Error())
}
القيود
الميزة | الحد الأقصى |
---|---|
طول اسم المجموعة | 255 حرفًا |
عدد الأقسام في مجموعة ما | 4,096 |
عدد الحقول في مجموعة ما | 256 |
عدد الشظايا في مجموعة ما | 256 |
بُعد النواقيس | 32,768 |
أعلى K | 16,384 |
عدد النواقص المستهدفة | 16,384 |
القيام بعملية البحث المختلط
البحث المختلط في الأساس هو بحث نائب مع تصفية السمات. من خلال تحديد تعبير منطقي لتصفية الحقول الطردية أو الحقول الرئيسية، يمكنك تقييد البحث استنادًا إلى شروط محددة.
يوضح المثال التالي كيفية إجراء بحث مختلط باستخدام البحث النائب العادي. فلنفترض أنك ترغب في البحث عن كتب محددة بناءً على مقدمة الكتب المتجهية، ولكنك ترغب فقط في استرداد الكتب ضمن نطاق محدد لعدد الكلمات. يمكنك بعد ذلك تصفية حقل "عدد الكلمات" عن طريق تحديد تعبير منطقي في معاملات البحث. سيقوم Milvus بالبحث فقط عن نوافذ مماثلة ضمن الكيانات التي تطابق التعبير.
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)
}