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.