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.