Melakukan Kueri Berdasarkan Kondisi
Topik ini memperkenalkan cara melakukan kueri berdasarkan kondisi, mirip dengan kondisi WHERE dalam SQL.
Tidak seperti pencarian kesamaan vektor, kueri mengambil vektor berdasarkan penyaringan skalar menggunakan ekspresi logika boolean. Milvus mendukung berbagai jenis data dalam bidang skalar dan berbagai ekspresi boolean. Ekspresi boolean dapat menyaring bidang skalar atau bidang kunci primer dan mengambil semua hasil yang cocok dengan kondisi penyaringan.
Contoh berikut ini menunjukkan bagaimana menjalankan kueri pada kumpulan data yang berisi 2000 baris, termasuk ID buku (kunci primer), jumlah kata (bidang skalar), dan pengantar buku (bidang vektor). Ini mensimulasikan pencarian buku tertentu berdasarkan ID mereka.
Memuat Koleksi
Di Milvus, semua operasi pencarian dan kueri dilakukan di memori. Sebelum melakukan kueri, koleksi perlu dimuat ke memori.
err := milvusClient.LoadCollection(
context.Background(), // ctx
"book", // CollectionName
false // async
)
if err != nil {
log.Fatal("Gagal memuat koleksi:", err.Error())
}
Melakukan Kueri
Contoh berikut ini menyaring vektor berdasarkan nilai book_id
tertentu dan mengembalikan bidang book_id
dan book_intro
dari hasilnya.
Milvus mendukung pengaturan tingkat konsistensi untuk kueri. Contoh ini mengatur tingkat konsistensi menjadi Strong
. Anda juga dapat mengatur tingkat konsistensi menjadi Bounded
, Session
, atau Eventually
. Untuk informasi lebih lanjut tentang empat tingkat konsistensi di Milvus, lihat Konsistensi.
Anda juga dapat menggunakan bidang dinamis dalam ekspresi penyaringan dan bidang keluaran dalam permintaan kueri. Misalnya, lihat pola dinamis.
opt := client.SearchQueryOptionFunc(func(option *client.SearchQueryOption) {
option.Limit = 3
option.Offset = 0
option.ConsistencyLevel = entity.ClStrong
option.IgnoreGrowing = false
})
queryResult, err := milvusClient.Query(
context.Background(), // ctx
"book", // CollectionName
"", // PartitionName
entity.NewColumnInt64("book_id", []int64{2,4,6,8}), // expr
[]string{"book_id", "book_intro"}, // OutputFields
opt, // queryOptions
)
if err != nil {
log.Fatal("Gagal melakukan kueri pada koleksi:", err.Error())
}
Parameter | Deskripsi | Opsi |
---|---|---|
ctx |
Konteks yang digunakan untuk mengontrol proses panggilan API. | Tidak ada |
CollectionName |
Nama koleksi yang akan dikueri. | Tidak ada |
partitionName |
Nama-nama partisi yang akan dimuat. Jika kosong, kueri semua partisi. | Tidak ada |
expr |
Ekspresi boolean yang digunakan untuk menyaring atribut. | Untuk informasi lebih lanjut, lihat Aturan Ekspresi Boolean. |
OutputFields |
Nama-nama bidang yang akan dikembalikan. | Bidang vektor tidak didukung dalam versi saat ini. |
opts |
Opsi kueri yang direpresentasikan dalam bentuk entity.SearchQueryOptionFunc . |
- Limit menunjukkan jumlah entitas yang akan dikembalikan. - Offset menunjukkan jumlah entitas yang akan dilewati selama proses pencarian. Jumlah parameter ini dan Limit harus kurang dari 16384 . - ConsistencyLevel menunjukkan tingkat konsistensi yang akan diterapkan selama proses pencarian. - Ignore Growing menunjukkan apakah mengabaikan segmen yang tumbuh selama proses pencarian kesamaan. Nilai defaultnya adalah False , menunjukkan bahwa pencarian melibatkan segmen yang tumbuh. |
Periksa hasil yang dikembalikan.
fmt.Printf("%#v\n", queryResult)
for _, qr := range queryResult {
fmt.Println(qr.IDs)
}
Menghitung Jumlah Entitas
Saar melakukan kueri, Anda dapat menambahkan count(*)
ke output_fields
, sehingga Milvus dapat mengembalikan jumlah entitas dalam koleksi. Jika ingin menghitung jumlah entitas yang memenuhi kondisi tertentu, gunakan expr
untuk mendefinisikan ekspresi boolean.
Batasan
Ketika menggunakan count(*)
dalam output_fields
, penggunaan parameter limit
tidak diizinkan.