Pola Ekspresi Filter
Di Milvus, ekspresi filter yang kompleks dengan banyak elemen, terutama yang melibatkan karakter non-ASCII seperti karakter CJK, dapat sangat memengaruhi kinerja kueri. Untuk mengatasi hal ini, Milvus memperkenalkan mekanisme templat ekspresi filter yang dirancang untuk meningkatkan efisiensi dengan mengurangi waktu yang dihabiskan untuk mengurai ekspresi yang kompleks. Halaman ini menjelaskan penggunaan templat ekspresi filter dalam operasi pencarian, kueri, dan penghapusan.
Gambaran Umum
Pola ekspresi filter memungkinkan Anda membuat ekspresi filter dengan placeholder, yang dapat diganti secara dinamis dengan nilai selama eksekusi kueri. Dengan menggunakan pola, Anda tidak perlu menyisipkan array besar atau ekspresi kompleks secara langsung ke dalam filter, sehingga mengurangi waktu penguraian dan meningkatkan kinerja kueri.
Misalkan Anda memiliki ekspresi filter yang melibatkan dua bidang, age dan city, dan Anda ingin menemukan semua orang yang usianya lebih dari 25 tahun dan tinggal di “北京” (Beijing) atau “上海” (Shanghai). Alih-alih menyisipkan nilai-nilai tersebut secara langsung ke 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 penanda tempat yang akan diganti dengan nilai sebenarnya di ` filter_params ` saat kueri dijalankan.
Penggunaan templat ekspresi filter di Milvus memiliki beberapa keunggulan utama:
Waktu Parsing yang Lebih Singkat: Dengan mengganti ekspresi filter yang besar atau kompleks dengan penanda tempat, sistem menghabiskan waktu lebih sedikit untuk mem-parsing dan memproses filter.
Peningkatan Kinerja Kueri: Dengan berkurangnya beban pemrosesan, kinerja kueri meningkat, sehingga menghasilkan QPS yang lebih tinggi dan waktu respons yang lebih cepat.
Skalabilitas: Seiring bertambahnya dataset Anda dan ekspresi filter menjadi lebih kompleks, templating memastikan bahwa kinerja tetap efisien dan dapat diskalakan.
Operasi Pencarian
Untuk operasi pencarian di Milvus, ekspresi ` filter ` digunakan untuk mendefinisikan kondisi penyaringan, dan parameter ` filter_params ` digunakan untuk menentukan nilai-nilai pengganti. Kamus ` filter_params ` berisi nilai-nilai dinamis yang akan digunakan Milvus untuk menggantikan nilai dalam ekspresi filter.
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 ` ["北京", "上海"] ` saat menjalankan pencarian.
Operasi Kueri
Mekanisme templating yang sama dapat diterapkan pada operasi kueri di Milvus. Dalam fungsi ` query `, Anda mendefinisikan ekspresi filter dan menggunakan ` filter_params ` untuk menentukan nilai-nilai yang akan disubstitusi.
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 templat ekspresi filter dalam operasi penghapusan. Serupa dengan pencarian dan kueri, ekspresi ` filter ` mendefinisikan kondisi, sedangkan ` filter_params ` menyediakan nilai dinamis untuk penanda tempat.
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
Pola ekspresi filter merupakan alat penting untuk mengoptimalkan kinerja kueri di Milvus. Dengan menggunakan penanda tempat dan kamus filter_params, Anda dapat secara signifikan mengurangi waktu yang dihabiskan untuk mengurai ekspresi filter yang kompleks. Hal ini menghasilkan eksekusi kueri yang lebih cepat dan kinerja keseluruhan yang lebih baik.