اجرای پرس و جوهای شرطی
در این بخش، نحوهی اجرای پرس و جوهای شرطی معرفی میشود که شبیه به شرایط WHERE SQL است.
برخلاف جستجوی شباهت بردار، پرس و جوها بر اساس فیلتر کردن اسکالر با استفاده از عبارات بولیایی بردارها را بازیابی میکنند. Milvus از انواع دادهها در فیلدهای اسکالر و انواع مختلفی از عبارات بولیایی پشتیبانی میکند. عبارات بولیایی میتوانند فیلدهای اسکالر یا فیلدهای کلید اصلی را فیلتر کنند و تمام نتایج مطابق با شرایط فیلتر را بازیابی کنند.
در قطعه کد زیر، نشان داده شده است که چگونه یک پرسوجو را بر روی مجموعهای از 2000 رکورد انجام داده و شامل شناسه کتاب (کلید اصلی)، تعداد کلمات (فیلد اسکالر) و معرفی کتاب (فیلد برداری) است. این قطعه کد به شبیهسازی پرسوجو برای کتابهای خاص بر اساس شناسه آنها میپردازد.
بارگذاری مجموعه
در Milvus، تمام عملیات جستجو و پرس و جو در حافظه انجام میشود. قبل از انجام یک پرسوجو، نیاز است که مجموعه داده به حافظه بارگذاری شود.
err := milvusClient.LoadCollection(
context.Background(), // ctx
"book", // CollectionName
false // async
)
if err != nil {
log.Fatal("Failed to load collection:", err.Error())
}
اجرای پرسوجو
قطعه کد زیر نمونهای از فیلتر کردن بردارها بر اساس مقادیر خاص book_id
را نشان میدهد و فیلدهای book_id
و book_intro
نتایج را بازمیگرداند.
Milvus از تنظیم سطوح همترازی برای پرسوجوها پشتیبانی میکند. این نمونه سطح همترازی را به قوی (Strong)
تنظیم میکند. همچنین میتوانید سطح همترازی را به محدودشده (Bounded)
، نشست (Session)
یا در نهایت (Eventually)
تنظیم کنید. برای اطلاعات بیشتر در مورد چهار سطح همترازی در Milvus، به همترازی مراجعه کنید.
همچنین میتوانید از فیلدهای پویا در عبارات فیلتر و فیلدهای خروجی در درخواست پرسوجو استفاده کنید. برای مثال، به الگوی پویا مراجعه کنید.
opt := client.SearchQueryOptionFunc(func(option *client.SearchQueryOption) {
option.Limit = 3
option.Offset = 0
option.ConsistencyLevel = entity.ClStrong
option.IgnoreGrowing = false
})
queryResult, err := milvusClient.Query(
context.Background(), // ctx
"book", // CollectionName
"", // PartitionName
entity.NewColumnInt64("book_id", []int64{2,4,6,8}), // expr
[]string{"book_id", "book_intro"}, // OutputFields
opt, // queryOptions
)
if err != nil {
log.Fatal("Failed to query the collection:", err.Error())
}
پارامتر | توضیحات | گزینهها |
---|---|---|
ctx |
زمینه مورد استفاده برای کنترل فرآیند فراخوانی API. | N/A |
CollectionName |
نام مجموعه ای که قرار است پرسوجو شود. | N/A |
partitionName |
اسامی بخشهایی که باید بارگذاری شود. اگر خالی باشد، تمام بخشها را پرسوجو کنید. | N/A |
expr |
عبارت بولیاییای که برای فیلتر کردن ویژگیها استفاده میشود. | برای اطلاعات بیشتر به قوانین اصطلاحات بولیایی مراجعه کنید. |
OutputFields |
اسامی فیلدهایی که باید بازگردانده شوند. | فیلدهای برداری در نسخه فعلی پشتیبانی نمیشوند. |
opts |
گزینههای پرسوجو نمایندگی شده در اشکال entity.SearchQueryOptionFunc . |
- limit تعداد موجودیتهای بازگردانده شده را نشان میدهد. - offset تعداد موجودیتهایی را که در طول فرآیند جستجو صرفنظر کنیم را نشان میدهد. مجموع این پارامتر و limit باید کمتر از 16384 باشد. - ConsistencyLevel سطح همترازی مورد استفاده در طول فرآیند جستجو را نمایش میدهد. - Ignore Growing نشان میدهد که آیا باید بخش رشدی را در طول فرآیند جستجو شباهت رد کنیم یا نه. مقدار پیش فرض false است که نشان میدهد جستجو شامل بخش رشدی میشود. |
نتیجه برگردانده شده را بررسی کنید.
fmt.Printf("%#v\n", queryResult)
for _, qr := range queryResult {
fmt.Println(qr.IDs)
}
محاسبه تعداد موجودیتها
هنگام اجرای پرسوجو، میتوانید count(*)
را به output_fields
اضافه کنید تا Milvus بتواند تعداد موجودیتها را در مجموعه بازگرداند. اگر میخواهید تعداد موجودیتهای مطابق با شرایط خاصی را بشمارید، از expr
استفاده کنید تا یک عبارت بولیایی تعریف کنید.
محدودیتها
هنگام استفاده از count(*)
در output_fields
، استفاده از پارامتر limit
مجاز نیست.