DashVector dirancang tanpa skema (schema-free). Saat Anda menyisipkan, memperbarui, atau melakukan upsert dokumen, cukup berikan pasangan kunci-nilai apa pun dalam parameter fields. Tidak diperlukan definisi skema di muka.
collection.insert(
Doc(
id='1',
vector=np.random.rand(4),
fields={
'name': 'zhangsan',
'weight': 70.0,
'age': 30,
'anykey1': 'anyvalue',
'anykey2': 1,
'anykey3': True,
'anykey4': 3.1415926
... ...
}
)
)Setiap bidang tambahan mengonsumsi sumber daya memori dan ruang disk. Sertakan hanya bidang yang diperlukan untuk kebutuhan filtering atau pengambilan Anda.
Tipe data yang didukung
Bidang menerima empat tipe data Python:
| Type | Description | Constraints |
|---|---|---|
str | Nilai string | -- |
float | Bilangan floating-point | -- |
int | Nilai integer | Hanya integer bertanda 32-bit: -2.147.483.648 hingga 2.147.483.647 |
bool | Nilai Boolean | True atau False |
Tipe int Python mendukung presisi arbitrer, tetapi DashVector hanya menerima integer bertanda 32-bit (-2.147.483.648 hingga 2.147.483.647). Nilai di luar rentang ini akan menyebabkan error overflow.
Filter berdasarkan bidang
Gunakan pasangan kunci-nilai bidang dalam ekspresi filter untuk mempersempit hasil pencarian:
ret = collection.query(
vector=[0.1, 0.2, 0.3, 0.4],
filter='(age > 18 and anykey2 = 1) or (name like "zhang%" and anykey3 = false)'
)Semakin banyak bidang dan semakin kompleks ekspresi filter, semakin tinggi penggunaan CPU dan latensi kueri.
Kapan harus menentukan skema bidang di awal
Meskipun DashVector secara default bersifat schema-free, menentukan skema bidang saat membuat koleksi meningkatkan performa kueri, mengurangi overhead penyimpanan, dan memungkinkan validasi input.
ret = client.create(
name='complex',
dimension=4,
fields_schema={'name': str, 'weight': float, 'age': int}
)Manfaat bidang yang telah ditentukan sebelumnya
| Benefit | Description |
|---|---|
| Faster filtering | Conditional filtering pada bidang yang telah ditentukan menggunakan lebih sedikit CPU dan mengembalikan hasil lebih cepat dibandingkan filtering pada bidang ad-hoc. |
| Lower storage overhead | Bidang yang telah ditentukan hanya menyimpan nilai. Bidang ad-hoc menyimpan kunci dan nilai, sehingga mengonsumsi lebih banyak memori dan disk space. |
| Filter pre-validation | DashVector memvalidasi sintaks filter terhadap tipe bidang yang telah ditentukan dan mengembalikan error jika terjadi ketidaksesuaian tipe. Tanpa skema, validasi tipe tidak tersedia. |
Pendekatan yang direkomendasikan
Tentukan di awal bidang-bidang yang muncul di sebagian besar dokumen dan yang sering Anda gunakan untuk filtering. Gunakan bidang ad-hoc saat penyisipan untuk atribut yang hanya berlaku pada subset dokumen tertentu.