Koşullu Sorgu
Bu konu, koşullu sorguların nasıl gerçekleştirileceğini tanıtır.
Vektörler üzerinde benzerlik aramalarının aksine, koşullu sorgular, boolean ifadeler aracılığıyla skalarn değerlere göre vektörleri getirir. Milvus, skalarn alanlar ve çeşitli boolean ifadelerinde sorgulamayı destekler. Boolean ifadeleri, skaler alanları veya birincil anahtar alanlarını filtrelemek için kullanarak filtreleme koşullarına uygun tüm sonuçları almayı sağlar.
Aşağıdaki örnek, 2000 satır kitap içeren bir veri kümesini sorgulamanın senaryosunu simüle eden, kitap kimliği (birincil anahtar), kelime sayısı (skalar alan) ve kitap tanıtımını (vektör alan) içeren bir veri kümesini sorgulamanın nasıl yapıldığını göstermektedir.
Koleksiyonu Yükle
Sorgu gerçekleştirmeden önce, koleksiyonun belleğe yüklenmesi gerekir.
from pymilvus import Collection
collection = Collection("book") # Mevcut bir koleksiyon elde edin.
collection.load()
Sorgu Gerçekleştirme
Aşağıdaki örnek, belirli book_id
değerlerine göre vektörleri filtreler ve sonuçlarda book_id
alanı ve book_intro
alanını döndürür.
Milvus, sorgular için tutarlılık seviyeleri belirlemeyi destekler. Bu konunun örneği, tutarlılık seviyesini Strong
olarak ayarlar. Ayrıca tutarlılık seviyesini Bounded
, Session
veya Eventually
olarak da ayarlayabilirsiniz. Milvus'taki dört tutarlılık seviyesi hakkında daha fazla bilgi için Lütfen Consistency bölümüne bakınız.
Filtre ifadesinde dinamik alanları da kullanabilir ve sorgu isteğinde çıkış alanlarını belirtebilirsiniz. Örneğin, Dinamik Şema'ya bakınız.
res = collection.query(
expr = "book_id in [2,4,6,8]",
offset = 0,
limit = 10,
output_fields = ["book_id", "book_intro"],
)
Parametre | Açıklama |
---|---|
expr |
Özellikleri filtrelemek için kullanılan boolean ifadesi. Boolean ifadeler hakkında daha fazla bilgi için Boolean Expression Rules bölümüne bakınız. |
limit |
Döndürülecek en benzer sonuçların sayısı. Bu değerin ve offset 'in toplamı 16384'ten az olmalıdır. |
offset |
Koleksiyonda atlanacak sonuç sayısı. Sadece limit belirtildiğinde kullanılabilir ve bu değerin ve limit 'in toplamı 16384'ten az olmalıdır. Örneğin, bir vektörün 9. ve 10. en yakın komşularını sorgulamak istiyorsanız, limit i 2 olarak ayarlayın ve offset 'i 8 olarak ayarlayın. |
output_fields (isteğe bağlı) |
Döndürülecek alan adları listesi. |
partition_names (isteğe bağlı) |
Sorgulama yapılacak bölüm adlarının listesi. |
consistency_level (isteğe bağlı) |
Sorgu için tutarlılık seviyesi. |
Döndürülen sonuçları kontrol edin.
sorted_res = sorted(res, key=lambda k: k['book_id'])
sorted_res
Varlıkları Say
Bir sorgu gerçekleştirirken, output_fields
içine count(*)
ekleyerek Milvus’un koleksiyondaki varlık sayısını döndürmesini sağlayabilirsiniz. Belirli koşulları karşılayan varlık sayısını saymak istiyorsanız, expr
kullanarak bir boolean ifade tanımlayın.
Koleksiyondaki tüm varlıkları sayın:
res = collection.query(
expr="",
output_fields = ["count(*)"],
)
print(res)
print(res[0])
Belirli filtreleme koşullarını karşılayan varlık sayısını sayın:
res = collection.query(
expr="book_id in [2,4,6,8]",
output_fields = ["count(*)"],
)
print(res)
print(res[0])
Kısıtlamalar
count(*)
'ı output_fields
içinde kullanırken, limit
parametresinin kullanımı yasaktır.