Kueri Berdasarkan Kondisi

Tema ini memperkenalkan cara melakukan kueri berdasarkan kondisi.

Tidak seperti pencarian kesamaan pada vektor, kueri berdasarkan kondisi mengambil vektor menggunakan filter skalar melalui ekspresi boolean. Milvus mendukung kueri pada bidang skalar dan berbagai ekspresi boolean. Ekspresi boolean dapat digunakan untuk menyaring bidang skalar atau bidang kunci utama untuk mengambil semua hasil yang cocok dengan kondisi penyaringan.

Contoh berikut ini menjelaskan bagaimana melakukan kueri terhadap dataset berisi 2000 baris buku, termasuk ID buku (kunci utama), jumlah kata (bidang skalar), dan pengantar buku (bidang vektor), mensimulasikan skenario kueri buku tertentu berdasarkan ID-nya.

Memuat Koleksi

Sebelum melakukan kueri, koleksi perlu dimuat ke dalam memori.

from pymilvus import Collection
koleksi = Collection("buku")      # Dapatkan koleksi yang ada.
koleksi.load()

Melakukan Kueri

Contoh berikut ini menyaring vektor berdasarkan nilai book_id tertentu dan mengembalikan bidang book_id dan bidang book_intro dalam hasilnya.

Milvus mendukung pengaturan tingkat konsistensi untuk kueri. Contoh pada topik ini mengatur tingkat konsistensi menjadi Strong. Anda juga dapat mengatur tingkat konsistensi menjadi Bounded, Session, atau Eventually. Untuk informasi lebih lanjut mengenai empat tingkat konsistensi dalam Milvus, silakan lihat Konsistensi.

Anda juga dapat menggunakan bidang dinamis dalam ekspresi penyaringan dan menentukan bidang keluaran dalam permintaan kueri. Sebagai contoh, lihat Skema Dinamis.

res = koleksi.query(
  expr = "book_id in [2,4,6,8]",
  offset = 0,
  limit = 10, 
  output_fields = ["book_id", "book_intro"],
)

Parameter Deskripsi
expr Ekspresi boolean yang digunakan untuk menyaring properti. Untuk informasi lebih lanjut tentang aturan ekspresi boolean, silakan lihat Aturan Ekspresi Boolean.
limit Jumlah hasil paling mirip yang akan dikembalikan. Jumlah nilai ini dan offset seharusnya kurang dari 16384.
offset Jumlah hasil yang akan dilewati dalam koleksi. Hanya tersedia saat limit ditentukan, dan jumlah nilai ini dan limit seharusnya kurang dari 16384. Sebagai contoh, jika Anda ingin melakukan kueri terhadap tetangga terdekat ke-9 dan ke-10 dari suatu vektor, atur limit menjadi 2, dan offset menjadi 8.
output_fields (opsional) Daftar nama bidang yang akan dikembalikan.
partition_names (opsional) Daftar nama partisi untuk kueri.
consistency_level (opsional) Tingkat konsistensi untuk kueri.

Periksa hasil yang dikembalikan.

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

Menghitung Entitas

Ketika melakukan kueri, Anda dapat menambahkan count(*) dalam output_fields sehingga Milvus dapat mengembalikan jumlah entitas dalam koleksi. Jika Anda ingin menghitung jumlah entitas yang memenuhi kondisi-kondisi tertentu, gunakan expr untuk mendefinisikan ekspresi boolean.

Hitung semua entitas dalam koleksi:

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

print(res)
print(res[0])

Hitung jumlah entitas yang memenuhi kondisi penyaringan tertentu:

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

print(res)
print(res[0])

Batasan

Ketika menggunakan count(*) dalam output_fields, penggunaan parameter limit dilarang.