پرس و جو شرطی

در این بخش، نحوه‌ی انجام پرس و جوهای شرطی را معرفی می‌کنیم.

برخلاف جستجوهای مشابه بردارها، پرس و جوهای شرطی بردارهایی را با استفاده از فیلترهای عددی از طریق عبارات بولیانی بازیابی می‌کنند. 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 ممنوع است.