คิวรี่ที่ต้องการ

หัวข้อนี้จะนำเสนอวิธีการทำคิวรีที่มีเงื่อนไข

ไม่เหมือนกับการค้นหาความคล้ายคลึงบนเวกเตอร์ คิวรีที่มีเงื่อนไขนำคืนเวกเตอร์โดยใช้ตัวกรองของตัวเลขผ่านการใช้สูตรสัจพจสถานัย Milvus รองรับคิวรีบนฟิลด์ตัวเลขและสูตรสร้างสรรค์แบบตัวเลขต่างๆ สูตรสุริ สามารถใช้ตัวกรองฟิลด์ตัวเลขหรือฟิลด์หลักเพื่อหาผลลัพธ์ทั้งหมดที่ตรงกับเงื่อนไขการกรอง

ตัวอย่างต่อไปนี้อธิพลการคิวรี่ชุดข้อมูลของ 2000 แถวของหนังสือ ซึ่งรวมถึง ID ของหนังสือ (หลัก), word count (ฟิลด์ตัวเลข), และ book introduction (ฟิลด์เวกเตอร์) ซึ่งจะจำลองบรรยากาศการค้นหาหนังสือที่แน่นอนโดยการใช้ ID ของหนังสือ

โหลดคอลเล็กชัน

ก่อนจะทำคิวรี คอลเล็กชันจำเป็นต้องถูกโหลดเข้าในหน่วยความจำ

from pymilvus import Collection
collection = Collection("book")      # ได้รับคอลเล็กชันที่มีอยู่
collection.load()

ดำเนินการคิวรี

ตัวอย่างต่อไปนี้กรองเวกเตอร์โดยใช้ค่า book_id ที่แน่นอน และ คืนฟิลด์ book_id และ book_intro ในผลลัพธ์

Milvus รองรับการตั้งระดับความสัมพันธ์สำหรับคิวรี ตัวอย่างในหัวข้อนี้ตั้งความสัมพันธ์ไปยัง Strong คุณยังสามารถตั้งระดับความสัมพันธ์ไปยัง Bounded, Session, หรือ Eventually สำหรับข้อมูลเพิ่มเติมเกี่ยวกับระดับความสัมพันธ์ที่สี่ของ 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 เช่น ถ้าคุณต้องการคิวรีคนองที่ 9 และ 10 ของเวกเตอร์ ตั้งค่า limit เป็น 2 และ offset เป็น 8
output_fields (ไม่บังคับ) รายชื่อชื่อฟิลด์ที่จะคืนค่า
partition_names (ไม่บังคับ) รายชื่อชื่อพาร์ทิชันที่จะคิวรี
consistency_level (ไม่บังคับ) ระดับความสัมพันธ์สำหรับคิวรี

ตรวจสอบผลลัพธ์ที่คืนค่า

sorted_res = sorted(res, key=lambda k: k['book_id'])
sorted_res

นับ Entity

เมื่อทำการคิวรี คุณสามารถเพิ่ม count(*) ใน output_fields เพื่อซึ่ง Milvus จะสามารถคืนค่าจำนวนของ entities ในคอลเล็กชัน หากคุณต้องการนับจำนวนของ entities ที่ตรงเงื่อนไขที่เจอใช้ expr เพื่อกำหนดสูตรสัจพจ

นับ entities ทั้งหมดในคอลเล็กชัน

res = collection.query(
  expr="", 
  output_fields = ["count(*)"],
)

print(res)
print(res[0])

นับจำนวน entities ที่ตรงเงื่อนไขการกรองที่เจอ

res = collection.query(
  expr="book_id in [2,4,6,8]", 
  output_fields = ["count(*)"],
)

print(res)
print(res[0])

ความจำกัด

เมื่อใช้ count(*) ใน output_fields การใช้พารามิเตอร์ limit ถูกห้าม