Koşullu Sorguların Yapılması

Bu konu, SQL WHERE koşullarına benzer şekilde koşullu sorguların nasıl yapıldığını tanıtıyor.

Vektör benzerlik aramasının aksine, sorgular boolean ifadeler kullanarak skaler filtreleme üzerinden vektörleri alır. Milvus, skaler alanlarda çeşitli veri tiplerini ve çeşitli boolean ifadelerini destekler. Boolean ifadeler skaler alanları veya birincil anahtar alanlarını filtreleyebilir ve filtre koşullarına uyan tüm sonuçları alabilir.

Aşağıdaki örnek, 2000 satır içeren kitap kimliği (birincil anahtar), kelime sayısı (skaler alan) ve kitap tanıtımı (vektör alanı) içeren bir veri kümesinde sorgu nasıl gerçekleştirilir, belirli kitapları kimliklerine göre sorgulamayı simüle eder.

Koleksiyonun Yüklenmesi

Milvus'ta tüm arama ve sorgu işlemleri hafızada gerçekleştirilir. Bir sorgu gerçekleştirmeden önce koleksiyonun hafızaya yüklenmesi gerekir.

err := milvusClient.LoadCollection(
  context.Background(),   // ctx
  "book",                 // CollectionName
  false                   // async
)
if err != nil {
  log.Fatal("Koleksiyon yüklenemedi:", err.Error())
}

Sorgunun Yürütülmesi

Aşağıdaki örnek, belirli book_id değerlerine göre vektörleri filtreler ve sonuçların book_id ve book_intro alanlarını döndürür.

Milvus, sorgular için tutarlılık düzeylerini ayarlamayı destekler. Bu örnek, tutarlılık düzeyini Strong olarak ayarlar. Ayrıca tutarlılık düzeyini Bounded, Session veya Eventually olarak da ayarlayabilirsiniz. Milvus'taki dört tutarlılık düzeyi hakkında daha fazla bilgi için Tutarlılık bağlantısına bakın.

Ayrıca, sorgu isteğinde dinamik alanları ve çıktı alanlarını kullanabilirsiniz. Örneğin, dinamik desene bakınız.

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("Koleksiyon sorgulanamadı:", err.Error())
}
Parametre Açıklama Seçenekler
ctx API çağrısı sürecini kontrol etmek için kullanılan bağlam. Yok
CollectionName Sorgulanacak koleksiyonun adı. Yok
partitionName Yüklenecek bölümlerin adları. Boşsa, tüm bölümleri sorgula. Yok
expr Öznitelikleri filtrelemekte kullanılan boolean ifade. Daha fazla bilgi için Boolean İfade Kuralları bağlantısına bakın.
OutputFields Döndürülecek alanların adları. Geçerli sürümde vektör alanları desteklenmez.
opts entity.SearchQueryOptionFunc formunda temsil edilen sorgu seçenekleri. - Limit, döndürülecek varlık sayısını belirtir. - Offset, arama işlemi sırasında atlanacak varlık sayısını belirtir. Bu parametre ile Limit'in toplamı 16384'ten küçük olmalıdır. - ConsistencyLevel, arama işlemi sırasında uygulanacak tutarlılık düzeyini belirtir. - Ignore Growing, benzerlik arama işlemi sırasında büyüyen segmenti göz ardı edip etmeyeceği belirtir. Varsayılan değer False olup, aramanın büyüyen segmenti içereceğini belirtir.

Dönen sonucu kontrol edin.

fmt.Printf("%#v\n", queryResult)
for _, qr := range queryResult {
    fmt.Println(qr.IDs)
}

Varlık Miktarının Hesaplanması

Bir sorgu yürütürken, output_fields'a count(*) ekleyebilirsiniz, böylece Milvus koleksiyonundaki varlık miktarını döndürebilir. Belirli koşulları karşılayan varlık miktarını saymak istiyorsanız expr kullanarak bir boolean ifade tanımlayın.

Kısıtlamalar

output_fields içinde count(*) kullanırken limit parametresi kullanılmaz.