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.