Templating Filter
Dalam Milvus, ekspresi filter yang kompleks dengan banyak elemen, terutama yang melibatkan karakter non-ASCII seperti karakter CJK, dapat secara signifikan mempengaruhi kinerja kueri. Untuk mengatasi hal ini, Milvus memperkenalkan mekanisme templating ekspresi filter yang dirancang untuk meningkatkan efisiensi dengan mengurangi waktu yang dihabiskan untuk mengurai ekspresi kompleks. Halaman ini menjelaskan penggunaan templating ekspresi filter dalam operasi pencarian, kueri, dan hapus.
Ikhtisar
Templat ekspresi filter memungkinkan Anda membuat ekspresi filter dengan penampung, yang dapat diganti secara dinamis dengan nilai selama eksekusi kueri. Dengan menggunakan templating, Anda dapat menghindari penyematan larik besar atau ekspresi kompleks secara langsung ke dalam filter, sehingga mengurangi waktu penguraian dan meningkatkan kinerja kueri.
Katakanlah Anda memiliki ekspresi filter yang melibatkan dua bidang, age
dan city
, dan Anda ingin menemukan semua orang yang usianya lebih besar dari 25 tahun dan tinggal di "北京" (Beijing) atau "上海" (Shanghai). Alih-alih secara langsung menyematkan nilai dalam ekspresi filter, Anda dapat menggunakan templat.
filter = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}
Di sini, {age}
dan {city}
adalah placeholder yang akan diganti dengan nilai aktual di filter_params
ketika kueri dijalankan.
Menggunakan templating ekspresi filter di Milvus memiliki beberapa keuntungan utama.
Mengurangi Waktu Penguraian: Dengan mengganti ekspresi filter yang besar atau kompleks dengan placeholder, sistem menghabiskan lebih sedikit waktu untuk mengurai dan memproses filter.
Peningkatan Kinerja Kueri: Dengan berkurangnya waktu penguraian, performa kueri meningkat, sehingga menghasilkan QPS yang lebih tinggi dan waktu respons yang lebih cepat.
Skalabilitas: Seiring bertambahnya set data Anda dan ekspresi filter menjadi lebih kompleks, templating memastikan kinerja tetap efisien dan dapat diskalakan.
Operasi Pencarian
Untuk operasi pencarian di Milvus, ekspresi filter
digunakan untuk mendefinisikan kondisi pemfilteran, dan parameter filter_params
digunakan untuk menentukan nilai untuk penampung. Kamus filter_params
berisi nilai-nilai dinamis yang akan digunakan Milvus untuk menggantikan ekspresi penyaringan.
expr = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}
res = client.search(
"hello_milvus",
vectors[:nq],
filter=expr,
limit=10,
output_fields=["age", "city"],
search_params={"metric_type": "COSINE", "params": {"search_list": 100}},
filter_params=filter_params,
)
Dalam contoh ini, Milvus akan secara dinamis mengganti {age}
dengan 25
dan {city}
dengan ["北京", "上海"]
ketika menjalankan pencarian.
Operasi Kueri
Mekanisme templating yang sama dapat diterapkan pada operasi kueri di Milvus. Pada fungsi query
, Anda mendefinisikan ekspresi filter dan menggunakan filter_params
untuk menentukan nilai yang akan diganti.
expr = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}
res = client.query(
"hello_milvus",
filter=expr,
output_fields=["age", "city"],
filter_params=filter_params
)
Dengan menggunakan filter_params
, Milvus secara efisien menangani penyisipan nilai secara dinamis, sehingga meningkatkan kecepatan eksekusi kueri.
Operasi Penghapusan
Anda juga dapat menggunakan templating ekspresi filter dalam operasi penghapusan. Mirip dengan pencarian dan kueri, ekspresi filter
mendefinisikan kondisi, dan filter_params
menyediakan nilai dinamis untuk placeholder.
expr = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}
res = client.delete(
"hello_milvus",
filter=expr,
filter_params=filter_params
)
Pendekatan ini meningkatkan kinerja operasi penghapusan, terutama saat menangani kondisi filter yang kompleks.
Kesimpulan
Templating ekspresi filter adalah alat yang penting untuk mengoptimalkan kinerja kueri di Milvus. Dengan menggunakan placeholder dan kamus filter_params
, Anda dapat secara signifikan mengurangi waktu yang dihabiskan untuk mem-parsing ekspresi filter yang kompleks. Hal ini akan menghasilkan eksekusi kueri yang lebih cepat dan kinerja yang lebih baik secara keseluruhan.