پرس و جو شرطی
در این بخش، نحوهی انجام پرس و جوهای شرطی را معرفی میکنیم.
برخلاف جستجوهای مشابه بردارها، پرس و جوهای شرطی بردارهایی را با استفاده از فیلترهای عددی از طریق عبارات بولیانی بازیابی میکنند. Milvus امکان پرس و جو بر روی فیلدهای عددی و انواع مختلفی از عبارات بولیانی را پشتیبانی میکند. از عبارات بولیانی میتوان برای فیلتر کردن فیلدهای عددی یا فیلدهای کلید اصلی برای بازیابی همهی نتایجی که با شرایط فیلتر کننده مطابقت دارند، استفاده کرد.
مثال زیر نشان میدهد که چگونه یک مجموعه داده شامل ۲۰۰۰ ردیف کتاب، شامل شناسه کتاب (کلید اصلی)، تعداد کلمات (فیلد عددی) و معرفی کتاب (فیلد برداری) را جستجو کرده و سناریوی جستجو از یک کتاب خاص بر اساس شناسه آن، را شبیهسازی میکند.
بارگذاری مجموعه
قبل از انجام یک پرس و جو، باید مجموعه را به حافظه بارگذاری کنیم.
from pymilvus import Collection
collection = Collection("book") # یک مجموعه موجود بگیرید.
collection.load()
انجام پرس و جو
مثال زیر بردارها را بر اساس مقادیر خاص book_id
فیلتر کرده و فیلد book_id
و book_intro
را در نتایج برمیگرداند.
Milvus امکان تنظیم سطوح یکپارچگی برای پرس و جوها را پشتیبانی میکند. مثال ارائه شده در این بخش سطح یکپارچگی را به قوی
تنظیم میکند. همچنین میتوانید سطح یکپارچگی را به محدود
، جلسه
یا سرانجاماً
تنظیم کنید. برای کسب اطلاعات بیشتر در مورد چهار سطح یکپارچگی در Milvus، لطفا به یکپارچگی مراجعه کنید.
همچنین میتوانید از فیلدهای پویا در عبارت فیلتر استفاده کرده و فیلدهای خروجی را در درخواست پرس و جو مشخص کنید. به عنوان مثال، به طرح پویا مراجعه کنید.
res = collection.query(
expr = "book_id in [2,4,6,8]",
offset = 0,
limit = 10,
output_fields = ["book_id", "book_intro"],
)
پارامتر | توضیحات |
---|---|
expr |
عبارت بولیانی برای استفاده در فیلتر کردن ویژگیها. برای اطلاعات بیشتر در مورد قوانین عبارات بولیانی، لطفا به قوانین عبارات بولیانی مراجعه کنید. |
limit |
تعداد نتایج مشابهتهای بیشتر برای بازگرداندن. مجموع این مقدار و offset باید کمتر از 16384 باشد. |
offset |
تعداد نتایج برای رد کردن در مجموعه. فقط در صورت تعیین limit در دسترس است و مجموع این مقدار و limit باید کمتر از 16384 باشد. به عنوان مثال، اگر میخواهید نزدیکترین همسایههای ۹ و ۱۰ امین بردار را جستجو کنید، limit را به ۲ و offset را به ۸ تنظیم کنید. |
output_fields (اختیاری) |
لیست نام فیلدهای بازگشتی. |
partition_names (اختیاری) |
لیست نامهای بخشها برای جستجو. |
consistency_level (اختیاری) |
سطح یکپارچگی برای پرس و جو. |
نتایج بازگشتی را بررسی کنید.
sorted_res = sorted(res, key=lambda k: k['book_id'])
sorted_res
تعداد موجودیتها
هنگام انجام یک پرس و جو، میتوانید count(*)
را در output_fields
اضافه کنید، تا Milvus بتواند تعداد موجودیتها را در مجموعه برگرداند. اگر میخواهید تعداد موجودیتهایی که شرایط خاصی را برآورده میکنند را بشمارید، از expr
برای تعریف یک عبارت بولیانی استفاده کنید.
شماره تمام موجودیتها در مجموعه را بشمارید:
res = collection.query(
expr="",
output_fields = ["count(*)"],
)
print(res)
print(res[0])
تعداد موجودیتهایی که شرایط فیلتر شدن خاصی را برآورده میکنند را بشمارید:
res = collection.query(
expr="book_id in [2,4,6,8]",
output_fields = ["count(*)"],
)
print(res)
print(res[0])
محدودیتها
هنگام استفاده از count(*)
در output_fields
از استفاده از پارامتر limit
ممنوع است.