Muatan

Salah satu fitur penting dari Qdrant adalah kemampuannya untuk menyimpan informasi tambahan di luar vektor (atribut bisnis manajemen penyimpanan). Dalam terminologi Qdrant, informasi tambahan ini disebut "muatan".

Qdrant memungkinkan Anda untuk menyimpan informasi apa pun yang dapat direpresentasikan menggunakan JSON.

Berikut adalah contoh muatan khas:

{
    "nama": "jaket",
    "warna": ["merah", "biru"],
    "kuantitas": 10,
    "harga": 11.99,
    "lokasi": [
        {
            "bujur": 52.5200,
            "lintang": 13.4050
        }
    ],
    "ulasan": [
        {
            "pengguna": "Alice",
            "skor": 4
        },
        {
            "pengguna": "Bob",
            "skor": 5
        }
    ]
}

Jenis Muatan

Selain menyimpan muatan, Qdrant juga memungkinkan Anda untuk mencari berdasarkan jenis nilai tertentu. Fitur ini diimplementasikan sebagai filter tambahan selama proses pencarian dan memungkinkan Anda untuk menanamkan logika kustom di atas kesamaan semantik.

Selama proses penyaringan, Qdrant akan memeriksa kondisi nilai yang memenuhi kriteria filter. Jika jenis nilai yang disimpan tidak memenuhi kriteria filter, itu dianggap tidak memuaskan.

Misalnya, menerapkan kondisi rentang pada data string akan menghasilkan output kosong.

Namun, penanganan array (beberapa nilai dengan jenis yang sama) sedikit berbeda. Ketika kami menerapkan filter ke array, jika setidaknya satu nilai dalam array memenuhi kondisi, filter akan berhasil.

Diskusi mendetail tentang proses penyaringan dilakukan dalam bagian penyaringan.

Mari kita lihat jenis data yang didukung oleh Qdrant:

Bilangan Bulat

integer - bilangan bulat 64-bit, berkisar dari -9223372036854775808 hingga 9223372036854775807.

Contoh nilai integer tunggal dan ganda:

{
    "kuantitas": 10,
    "ukuran": [35, 36, 38]
}

Desimal

float - bilangan desimal 64-bit.

Contoh nilai float tunggal dan ganda:

{
    "harga": 11.99,
    "peringkat": [9.1, 9.2, 9.4]
}

Boolean

bool - nilai biner. Sama dengan true atau false.

Contoh nilai bool tunggal dan ganda:

{
    "dikirim": true,
    "balasan": [false, false, true, false]
}

Kata Kunci

keyword - nilai string.

Contoh nilai keyword tunggal dan ganda:

{
    "nama": "Alice",
    "teman": [
        "Bob",
        "Eva",
        "Jack"
    ]
}

Koordinat Geografis

geo digunakan untuk merepresentasikan koordinat geografis.

Contoh nilai geo tunggal dan ganda:

{
    "lokasi": {
        "bujur": 52.5200,
        "lintang": 13.4050
    },
    "kota": [
        {
            "bujur": 51.5072,
            "lintang": 0.1276
        },
        {
            "bujur": 40.7128,
            "lintang": 74.0060
        }
    ]
}

Koordinat harus dijelaskan sebagai objek yang berisi dua bidang: bujur - mewakili bujur, lintang - mewakili lintang.

Membuat titik dengan muatan

REST API (arsitektur)

PUT /koleksi/{nama_koleksi}/titik

{
    "titik": [
        {
            "id": 1,
            "vektor": [0.05, 0.61, 0.76, 0.74],
            "muatan": {"kota": "Berlin", "harga": 1.99}
        },
        {
            "id": 2,
            "vektor": [0.19, 0.81, 0.75, 0.11],
            "muatan": {"kota": ["Berlin", "London"], "harga": 1.99}
        },
        {
            "id": 3,
            "vektor": [0.36, 0.55, 0.47, 0.94],
            "muatan": {"kota": ["Berlin", "Moskow"], "harga": [1.99, 2.99]}
        }
    ]
}

Pengaturan muatan

REST API (Skema):

POST /collections/{nama_koleksi}/points/payload

{
    "payload": {
        "property1": "string",
        "property2": "string"
    },
    "points": [
        0, 3, 100
    ]
}

Penghapusan muatan

Metode ini menghapus kunci muatan yang ditentukan dari titik-titik yang ditentukan.

REST API (Skema):

POST /collections/{nama_koleksi}/points/payload/delete

{
    "keys": ["warna", "harga"],
    "points": [0, 3, 100]
}

Membersihkan muatan

Metode ini menghapus semua kunci muatan dari titik-titik yang ditentukan.

REST API (Skema):

POST /collections/{nama_koleksi}/points/payload/clear

{
    "points": [0, 3, 100]
}

Anda juga dapat menggunakan models.FilterSelector untuk menghapus titik-titik yang cocok dengan kondisi filter yang diberikan, daripada menyediakan ID.

Pengindeksan muatan

Untuk melakukan pencarian terfilter dengan efisien, Qdrant memungkinkan Anda untuk membuat indeks untuk bidang muatan dengan menentukan nama dan tipe bidang.

Bidang yang diindeks juga mempengaruhi indeks vektor.

Secara praktis, disarankan untuk membuat indeks pada bidang yang kemungkinan besar akan membatasi hasil paling banyak. Misalnya, indeks pada ID objek akan lebih efisien daripada indeks pada warna, karena ID objek unik untuk setiap catatan, sementara warna hanya memiliki beberapa nilai yang mungkin.

Dalam kueri komposit yang melibatkan beberapa bidang, Qdrant akan mencoba menggunakan indeks yang paling membatasi terlebih dahulu.

Untuk membuat indeks untuk sebuah bidang, dapat digunakan:

REST API (Skema)

PUT /collections/{nama_koleksi}/index

{
    "field_name": "nama bidang yang akan diindeks",
    "field_schema": "keyword"
}

Bidang yang diindeks ditampilkan dalam skema muatan bersama dengan API info koleksi.

Contoh skema muatan:

{
    "payload_schema": {
        "property1": {
            "data_type": "keyword"
        },
        "property2": {
            "data_type": "integer"
        }
    }
}