Sebuah vektor tidak menyimpan apa pun yang dapat dibaca manusia, sehingga vektor jarang disimpan sendirian. Setiap vektor disertai ID sebagai pengenal dan payload, yaitu metadata yang menemani vektor, seperti judul, kategori, tanggal, dan sumber dokumen. Topik ini menjelaskan struktur record yang menyatukan keduanya, peran payload pada pencarian dan tampilan hasil, serta tempat metadata pada tiga mesin yang berbeda.
ID dan payload pada satu record#
Pada mesin seperti Qdrant, satuan data disebut point, yaitu satu record yang memuat ID, vektor, dan payload dalam satu wadah. Payload disimpan bersama point-nya, sehingga hasil pencarian mengembalikan semuanya sekaligus. Contoh berikut memperlihatkan satu point untuk arsip catatan kelas.
{
"id": 1042,
"vector": [0.0132, -0.0271, 0.0443, -0.0068],
"payload": {
"judul": "Panduan Pencatatan Kas Kelas",
"kategori": "panduan",
"tanggal": "2026-04-12",
"sumber": "arsip-catatan-2026",
"halaman": 7
}
}ID bersifat unik di dalam collection, yaitu kumpulan point pada satu mesin, dan menjadi kunci saat vektor diperbarui atau dihapus. Penulisan dan pembacaan sama-sama bekerja pada satuan record ini, karena ID yang sama menimpa point lama tanpa menciptakan duplikat, sedangkan pembacaan mengembalikan record utuh tanpa penggabungan dari beberapa tabel. Vektor empat angka pada contoh hanyalah vektor ilustrasi, sedangkan vektor sungguhan memuat ratusan hingga ribuan angka.
Bidang payload dipilih dengan pertimbangan, karena bidang itulah yang nantinya digunakan oleh filter dan tampilan hasil. Payload juga menjadi jangkar penelusuran balik, karena vektor tidak dapat dimintai teks asalnya kembali, sehingga bidang seperti sumber dan halaman memungkinkan dokumen aslinya dilacak. Bidang yang jarang digunakan sebaiknya dibuang, karena payload yang menumpuk memperbesar setiap point dan memperlambat pemindahan datanya.
Payload untuk filter dan tampilan hasil#
Payload melayani dua kebutuhan yang berbeda. Pada pencarian, bidang payload digunakan sebagai filter, misalnya membatasi hasil ke kategori panduan atau ke dokumen yang terbit setelah tanggal tertentu, dan Qdrant menyediakan create_payload_index untuk mengindeks bidang tersebut agar filter berjalan cepat. Pada tampilan, payload menyediakan teks yang dikembalikan kepada pengguna, misalnya judul dan sumber dokumen, sehingga hasil tidak perlu diambil lagi dari penyimpanan lain.
Sebaliknya, vektor itu sendiri tidak terbaca manusia. Daftar 384 atau 1536 angka tidak memuat judul maupun cuplikan, dan dua vektor yang berdekatan hanya bermakna setelah payload masing-masing dibaca. Tanpa payload, hasil pencarian berupa deretan ID tanpa konteks apa pun.
Filter pada bidang payload juga menjawab kelemahan kemiripan murni. Vektor mengurutkan hasil berdasarkan kedekatan makna, tetapi tidak mengetahui batas waktu maupun pembagian kategori, sehingga permintaan seperti “dokumen panduan terbaru” tetap membutuhkan bidang tanggal dan kategori untuk membatasi ruang pencariannya. Ruang pencarian yang lebih sempit juga mempercepat pencariannya, karena kandidat yang dinilai lebih sedikit.
Payload juga menyimpan bidang yang menjelaskan asal sebuah vektor, misalnya nama model dan tanggal pembuatannya. Bidang semacam ini berguna saat koleksi dimigrasi ke model baru, karena vektor lama dan vektor baru harus dibedakan sebelum digabungkan. Nama model disimpan sebagai nilai teks biasa, misalnya all-MiniLM-L6-v2, sehingga bidangnya dapat difilter pula.
Setiap mesin menyimpan metadata di tempat yang berbeda dengan gagasan yang sama. Qdrant meletakkan payload bersama point, Postgres dengan pgvector menggunakan kolom biasa di samping kolom vektor, sedangkan Redis Vector Sets menyimpan atribut JSON pada setiap elemen melalui VSETATTR dan VGETATTR. Bentuk tabel Postgres berikut memperlihatkan pola kolomnya.
-- tidak-dijalankan
CREATE TABLE arsip_catatan (
id bigserial PRIMARY KEY,
judul text NOT NULL,
kategori text,
tanggal date,
konten_embedding vector(4)
);Kolom judul, kategori, dan tanggal berperan sebagai payload, dan pencarian vektornya dipadukan dengan WHERE pada kolom yang sama. Postgres menganggap kolom tersebut sama seperti kolom lain, sehingga metadata dapat diindeks dengan indeks relasional biasa. Gagasan ID, vektor, dan payload tetap sama di ketiga mesin, yang berubah hanya nama dan tempatnya.
Menyusun record dalam Python#
Record yang sama dapat disusun sebagai dictionary Python, yakni struktur kunci-nilai, sebelum dikirim ke penyimpanan. Strukturnya memetakan langsung ke JSON, sehingga tidak diperlukan konversi yang rumit. Skrip berikut membangun satu record arsip catatan dengan vektor ilustrasi empat elemen, kemudian menampilkannya sebagai JSON agar strukturnya terbaca.
import json
record = {
"id": 2087,
"vector": [0.0132, -0.0271, 0.0443, -0.0068],
"payload": {
"judul": "Jadwal Piket Kelas Bulan Mei",
"kategori": "jadwal",
"tanggal": "2026-05-01",
"sumber": "arsip-catatan-2026",
},
}
print(json.dumps(record, indent=2, ensure_ascii=False)){
"id": 2087,
"vector": [
0.0132,
-0.0271,
0.0443,
-0.0068
],
"payload": {
"judul": "Jadwal Piket Kelas Bulan Mei",
"kategori": "jadwal",
"tanggal": "2026-05-01",
"sumber": "arsip-catatan-2026"
}
}Strukturnya hampir identik dengan contoh point pada bagian pertama karena JSON merupakan format pertukaran data yang lazim digunakan antara aplikasi dan mesin vektor. Klien Qdrant menerima payload dalam bentuk dictionary, driver pgvector mengisi setiap kolom secara terpisah, sedangkan klien Redis menggabungkan atribut menjadi satu string JSON. Skema bidang payload dirancang bersamaan dengan skema pencarian sejak awal. Dengan demikian, setiap bidang yang diperlukan untuk penyaringan atau ditampilkan memang sudah tersedia pada record.
Pengiriman data juga dilakukan dalam satu panggilan, dengan ID, vektor, dan payload diberikan secara bersamaan. Praktik ini mencegah terbentuknya vektor tanpa metadata sumber yang merujuk kepadanya. Vektor semacam itu sulit ditampilkan maupun dibersihkan karena ID-nya tidak terhubung dengan metadata yang dapat digunakan untuk mengidentifikasi sumbernya.
Ringkasan#
- Satu record pencarian vektor memuat ID yang unik, vektor, dan payload berisi metadata seperti judul, kategori, tanggal, dan sumber.
- Payload digunakan untuk filter pencarian sekaligus untuk menampilkan hasil, sedangkan vektor tidak dapat dibaca manusia.
- Qdrant menyimpan payload bersama point, Postgres menggunakan kolom biasa di samping kolom vektor, dan Redis Vector Sets menyimpan atribut JSON pada setiap elemen.
Referensi#
- Dokumentasi Qdrant — Qdrant — Dokumentasi resmi Qdrant yang memuat konsep point dan payload beserta pengindeksan bidang payload untuk pencarian terfilter.
- Redis Vector Sets — Redis — Dokumentasi tipe data Vector Sets yang menyimpan elemen bervektor beserta atribut JSON-nya.
- Dokumentasi PostgreSQL — PostgreSQL — Dokumentasi tipe data dan tabel PostgreSQL sebagai dasar kolom metadata di samping kolom vektor.