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ı"
        }
    }
}