Pencarian kemiripan vektor saja jarang memadai untuk kebutuhan dunia nyata. Aplikasi umumnya perlu mempersempit hasil berdasarkan metadata—misalnya, hanya mengembalikan produk dalam rentang harga tertentu atau dokumen dari kategori spesifik. Fitur filtering kondisional DashVector memungkinkan Anda menyambungkan bidang metadata ke vektor dan meneruskan ekspresi filter saat melakukan kueri, sehingga hanya vektor yang memenuhi kondisi Anda yang dimasukkan dalam hasil kemiripan.
Mulai cepat
Contoh berikut melakukan kueri pada koleksi untuk mencari laki-laki berusia di atas 18 tahun yang memiliki bobot lebih dari 65 kg:
docs = collection.query(
[0.1, 0.1, 0.1, 0.1],
topk=10,
filter='age > 18 and weight > 65.0 and male = true'
)Parameter filter menerima ekspresi boolean yang dibangun dari operator perbandingan, string, dan logika. Untuk sintaks lengkapnya, lihat Sintaks Ekspresi Filter.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Kunci API DashVector dan titik akhir kluster
Koleksi bernama
quickstart. Untuk petunjuk penyiapan, lihat bagian "Contoh" di Buat Koleksi
Sisipkan dokumen dengan bidang metadata
Sisipkan dokumen ke dalam koleksi quickstart. Setiap dokumen mencakup ID, vektor berdimensi 4, dan sekumpulan bidang metadata:
import dashvector
import numpy as np
client = dashvector.Client(
api_key='<your-api-key>',
endpoint='<your-cluster-endpoint>'
)
collection = client.get(name='quickstart')
ret = collection.insert([
('1', np.random.rand(4), {'name': 'alice', 'age': 10, 'male': True, 'weight': 35.0}),
('2', np.random.rand(4), {'name': 'bob', 'age': 20, 'male': False, 'weight': 45.0}),
('3', np.random.rand(4), {'name': 'carol', 'age': 30, 'male': True, 'weight': 75.0}),
('4', np.random.rand(4), {'name': 'dave', 'age': 5, 'male': False, 'weight': 18.0}),
('5', np.random.rand(4), {'name': 'eve', 'age': 40, 'male': True, 'weight': 70.0})
])
assert retGanti placeholder berikut dengan nilai aktual Anda:
| Placeholder | Deskripsi |
|---|---|
<your-api-key> | Kunci API DashVector Anda |
<your-cluster-endpoint> | URL titik akhir kluster Anda |
Koleksi quickstart dibuat dengan tiga bidang yang telah ditentukan: name (str), weight (float), dan age (int). Karena DashVector bersifat schema-free, Anda dapat menambahkan bidang yang tidak didefinisikan saat pembuatan koleksi—seperti bidang male di atas—saat menyisipkan dokumen.
Lakukan kueri dengan ekspresi filter
Teruskan string filter ke collection.query() untuk membatasi hasil. Contoh berikut mencari laki-laki berusia di atas 18 tahun yang memiliki bobot lebih dari 65 kg:
import dashvector
client = dashvector.Client(
api_key='<your-api-key>',
endpoint='<your-cluster-endpoint>'
)
collection = client.get(name='quickstart')
# Filter: laki-laki di atas 18 tahun dengan bobot lebih dari 65 kg
docs = collection.query(
[0.1, 0.1, 0.1, 0.1],
topk=10,
filter='age > 18 and weight > 65.0 and male = true'
)
print(docs)Sintaks ekspresi filter
Ekspresi filter terdiri dari satu atau beberapa kondisi yang digabungkan dengan operator logika. Setiap kondisi mengikuti pola:
<field> <operator> <value>Operator perbandingan
| Operator | Deskripsi | Tipe yang didukung | Contoh | Cocok ketika |
|---|---|---|---|---|
< | Kurang dari | int, float | age < 10 | age kurang dari 10 |
<= | Kurang dari atau sama dengan | int, float | weight <= 60.0 | weight paling banyak 60,0 |
= | Sama dengan | int, float, bool, str | name = 'alice' | name sama dengan alice |
!= | Tidak sama dengan | int, float, bool, str | male != true | male tidak bernilai true |
>= | Lebih dari atau sama dengan | int, float | age >= 10 | age minimal 10 |
> | Lebih dari | int, float | weight > 60.0 | weight melebihi 60,0 |
Operator string
Gunakan operator like untuk pencocokan awalan pada bidang bertipe str.
| Operator | Deskripsi | Contoh | Cocok ketika |
|---|---|---|---|
like | Pencocokan awalan | name like 'al%' | name diawali dengan al |
Operator logika
Gabungkan beberapa kondisi dengan and atau or.
| Operator | Deskripsi | Contoh | Cocok ketika |
|---|---|---|---|
and | Kedua kondisi harus bernilai true | age > 18 and male = true | age melebihi 18 dan male bernilai true |
or | Setidaknya satu kondisi bernilai true | age < 10 or age > 60 | age kurang dari 10 atau lebih dari 60 |
Gunakan tanda kurung () untuk mengatur urutan evaluasi. Contohnya:
age > 18 and (weight > 65.0 or male = true)Ekspresi ini pertama-tama mengevaluasi (weight > 65.0 or male = true), lalu menggabungkan hasilnya dengan age > 18.
Tipe bidang yang didukung
Bidang DashVector mendukung tipe data Python berikut:
| Tipe | Deskripsi | Rentang |
|---|---|---|
str | String | -- |
int | Integer | Bertanda 32-bit: -2.147.483.648 hingga 2.147.483.647 |
float | Bilangan titik mengambang | -- |
bool | Boolean | True atau False |
Integer Python memiliki ukuran tak terbatas, tetapi DashVector hanya mendukung integer bertanda 32-bit. Pastikan nilai integer berada dalam rentang -2.147.483.648 hingga 2.147.483.647 untuk menghindari overflow.