Yük
Qdrant'in önemli özelliklerinden biri vektörler dışında ek bilgileri depolama yeteneğidir (depolama yönetimi işletme özellikleri). Qdrant terimleriyle, bu ek bilgilere "yük" denir.
Qdrant, JSON kullanılarak temsil edilebilen herhangi bir bilgiyi depolamanıza olanak tanır.
İşte tipik bir yük örneği:
{
"name": "ceket",
"color": ["kırmızı", "mavi"],
"quantity": 10,
"price": 11.99,
"location": [
{
"longitude": 52.5200,
"latitude": 13.4050
}
],
"reviews": [
{
"user": "Alice",
"score": 4
},
{
"user": "Bob",
"score": 5
}
]
}
Yük Türleri
Yükleri depolamanın yanı sıra, Qdrant ayrıca belirli türdeki değerlere göre arama yapmanıza olanak tanır. Bu özellik, arama sürecinde ek filtreler olarak uygulanır ve semantik benzerlik üzerine özel mantık entegre etmenize olanak tanır.
Filtreleme süreci sırasında, Qdrant, filtre kriterlerini karşılayan değerlerin koşullarını kontrol eder. Depolanan değer tipi, filtre kriterlerini karşılamıyorsa, yetersiz olarak kabul edilir.
Örneğin, dize verilerine aralık koşullarının uygulanması boş bir çıktıya neden olur.
Ancak, dizilerin (aynı türdeki birden çok değer) işlenmesi biraz farklıdır. Bir diziye filtreler uyguladığımızda, dizi içinde en az bir değer koşulu karşılarsa, filtre başarılı olur.
Filtreleme sürecinin ayrıntılı bir tartışması filtreleme bölümünde gerçekleştirilir.
Qdrant tarafından desteklenen veri tiplerine bir göz atalım:
Tamsayı
integer
- -9223372036854775808
ile 9223372036854775807
aralığında olan 64 bitlik tamsayı.
Tek ve çoklu integer
değerleri örnekleri:
{
"quantity": 10,
"sizes": [35, 36, 38]
}
Ondalıklı Sayı
float
- 64-bit kayan noktalı sayı.
Tek ve çoklu float
değerleri örnekleri:
{
"price": 11.99,
"rating": [9.1, 9.2, 9.4]
}
Mantıksal
bool
- ikili değer. true
veya false
ile eşittir.
Tek ve çoklu bool
değerleri örnekleri:
{
"delivered": true,
"replies": [false, false, true, false]
}
Anahtar Kelime
keyword
- dize değeri.
Tek ve çoklu keyword
değerleri örnekleri:
{
"name": "Alice",
"friends": [
"Bob",
"Eva",
"Jack"
]
}
Coğrafi Koordinatlar
geo
, coğrafi koordinatları temsil etmek için kullanılır.
Tek ve çoklu geo
değerleri örnekleri:
{
"location": {
"longitude": 52.5200,
"latitude": 13.4050
},
"cities": [
{
"longitude": 51.5072,
"latitude": 0.1276
},
{
"longitude": 40.7128,
"latitude": 74.0060
}
]
}
Koordinatlar, boylamı temsil eden longitude
ve enlemi temsil eden latitude
olmak üzere iki alan içeren bir nesne olarak tanımlanmalıdır.
Yükleme İle Noktalar Oluşturma
REST API (mimari)
PUT /collections/{collection_name}/points
{
"points": [
{
"id": 1,
"vector": [0.05, 0.61, 0.76, 0.74],
"payload": {"city": "Berlin", "price": 1.99}
},
{
"id": 2,
"vector": [0.19, 0.81, 0.75, 0.11],
"payload": {"city": ["Berlin", "Londra"], "price": 1.99}
},
{
"id": 3,
"vector": [0.36, 0.55, 0.47, 0.94],
"payload": {"city": ["Berlin", "Moskova"], "price": [1.99, 2.99]}
}
]
}
Yük verilerinin ayarlanması
REST API (Şema):
POST /collections/{collection_name}/points/payload
{
"payload": {
"property1": "string",
"property2": "string"
},
"points": [
0, 3, 100
]
}
Yük verilerinin silinmesi
Bu yöntem belirtilen noktalardan belirtilen yük anahtarlarını kaldırır.
REST API (Şema):
POST /collections/{collection_name}/points/payload/delete
{
"keys": ["color", "price"],
"points": [0, 3, 100]
}
Yük verilerinin temizlenmesi
Bu yöntem belirtilen noktalardan tüm yük anahtarlarını kaldırır.
REST API (Şema):
POST /collections/{collection_name}/points/payload/clear
{
"points": [0, 3, 100]
}
Ayrıca, verilen kimlik eşleşen filtre koşullarını sağlamak için, kimlikleri sağlamak yerine
models.FilterSelector
kullanabilirsiniz.
Yük endeksleme
Filtreli aramaları verimli bir şekilde gerçekleştirmek için, Qdrant size alanın adını ve türünü belirterek yük alanları için endeks oluşturmanıza izin verir.
Endekslenen alanlar vektör endeksini etkiler.
Uygulamada, sonuçları en fazla kısıtlayacak alanlarda endeks oluşturulması önerilir. Örneğin, her kayıt için benzersiz olan nesne kimliğine endeksleme yapmak, renge endekslemeden daha verimli olacaktır, çünkü renkte yalnızca birkaç olası değer bulunmaktadır.
Birden çok alanı içeren bileşik sorgularda, Qdrant öncelikle en kısıtlayıcı endeksi kullanmaya çalışacaktır.
Bir alan için endeks oluşturmak için aşağıdaki kullanılabilir:
REST API (Şema)
PUT /collections/{collection_name}/index
{
"field_name": "endekslenen alanın adı",
"field_schema": "anahtar kelime"
}
Endekslenen alanlar, koleksiyon bilgi API ile birlikte yük şemasında görüntülenir.
Örnek yük şeması:
{
"payload_schema": {
"property1": {
"data_type": "anahtar kelime"
},
"property2": {
"data_type": "tamsayı"
}
}
}