Penjelasan Pemfilteran
Milvus menyediakan kemampuan pemfilteran yang kuat yang memungkinkan kueri yang tepat untuk data Anda. Ekspresi penyaringan memungkinkan Anda untuk menargetkan bidang skalar tertentu dan mempersempit hasil pencarian dengan kondisi yang berbeda. Panduan ini menjelaskan cara menggunakan ekspresi filter di Milvus, dengan contoh-contoh yang difokuskan pada operasi kueri. Anda juga dapat menerapkan filter ini dalam permintaan pencarian dan penghapusan.
Operator dasar
Milvus mendukung beberapa operator dasar untuk memfilter data.
Operator Perbandingan:
==
!=
,>
,<
,>=
, dan<=
memungkinkan pemfilteran berdasarkan bidang numerik, teks, atau tanggal.Filter Rentang:
IN
danLIKE
membantu mencocokkan rentang atau kumpulan nilai tertentu.Operator Aritmatika:
+
,-
,*
,/
,%
, dan `` digunakan untuk perhitungan yang melibatkan bidang numerik.Operator Logika:
AND
,OR
, danNOT
atau '&&', '||', '~', '!' menggabungkan beberapa kondisi ke dalam ekspresi yang kompleks.
Contoh: Memfilter berdasarkan Warna
Untuk menemukan entitas dengan warna primer (merah, hijau, atau biru) dalam bidang skalar color
, gunakan ekspresi filter berikut.
filter='color in ["red", "green", "blue"]'
Contoh: Memfilter Bidang JSON
Milvus mengizinkan referensi kunci dalam bidang JSON. Misalnya, jika Anda memiliki bidang JSON product
dengan kunci price
dan model
, dan ingin menemukan produk dengan model dan harga tertentu yang lebih rendah dari 1.850, gunakan ekspresi filter ini.
filter='product["model"] == "JSN-087" and product["price"] < 1850'
Contoh: Memfilter Bidang Array
Jika Anda memiliki bidang larik history_temperatures
yang berisi catatan suhu, dan ingin menemukan observatorium yang mencatat suhu ke-10 melebihi 23°C, gunakan ekspresi ini.
filter='history_temperatures[10] > 23'
Untuk informasi lebih lanjut mengenai operator dasar ini, lihat Operator Dasar.
Templat ekspresi penyaringan
Ketika memfilter menggunakan karakter CJK, pemrosesan dapat menjadi lebih kompleks karena set karakter yang lebih besar dan perbedaan pengodean. Hal ini dapat mengakibatkan kinerja yang lebih lambat, terutama dengan operator IN
.
Milvus memperkenalkan templat ekspresi filter untuk mengoptimalkan kinerja saat bekerja dengan karakter CJK. Dengan memisahkan nilai dinamis dari ekspresi filter, mesin kueri menangani penyisipan parameter dengan lebih efisien.
Contoh
Untuk menemukan individu yang berusia di atas 25 tahun yang tinggal di "北京" (Beijing) atau "上海" (Shanghai), gunakan ekspresi templat berikut.
filter = "age > 25 and city in ['北京', '上海']"
Untuk meningkatkan kinerja, gunakan variasi ini dengan parameter.
filter = "age > {age} and city in {city}",
filter_params = {"age": 25, "city": ["北京", "上海"]}
Pendekatan ini mengurangi overhead penguraian dan meningkatkan kecepatan kueri. Untuk informasi lebih lanjut, lihat Filter Templating.
Operator khusus tipe data
Milvus menyediakan operator pemfilteran tingkat lanjut untuk tipe data tertentu, seperti bidang JSON, ARRAY, dan VARCHAR.
Operator khusus bidang JSON
Milvus menawarkan operator tingkat lanjut untuk menanyakan bidang JSON, memungkinkan pemfilteran yang tepat dalam struktur JSON yang kompleks.
JSON_CONTAINS(identifier, jsonExpr)
: Memeriksa apakah sebuah ekspresi JSON ada di dalam field.
# JSON data: {"tags": ["electronics", "sale", "new"]}
filter='json_contains(tags, "sale")'
JSON_CONTAINS_ALL(identifier, jsonExpr)
: Memastikan semua elemen dari ekspresi JSON ada.
# JSON data: {"tags": ["electronics", "sale", "new", "discount"]}
filter='json_contains_all(tags, ["electronics", "sale", "new"])'
JSON_CONTAINS_ANY(identifier, jsonExpr)
: Memfilter entitas yang setidaknya memiliki satu elemen dalam ekspresi JSON.
# JSON data: {"tags": ["electronics", "sale", "new"]}
filter='json_contains_any(tags, ["electronics", "new", "clearance"])'
Untuk detail lebih lanjut tentang operator JSON, lihat Operator JSON.
Operator khusus bidang ARRAY
Milvus menyediakan operator pemfilteran tingkat lanjut untuk bidang larik, seperti ARRAY_CONTAINS
, ARRAY_CONTAINS_ALL
, ARRAY_CONTAINS_ANY
, dan ARRAY_LENGTH
, yang memungkinkan kontrol yang lebih baik atas data larik.
ARRAY_CONTAINS
: Memfilter entitas yang mengandung elemen tertentu.
filter="ARRAY_CONTAINS(history_temperatures, 23)"
ARRAY_CONTAINS_ALL
: Memfilter entitas di mana semua elemen dalam daftar ada.
filter="ARRAY_CONTAINS_ALL(history_temperatures, [23, 24])"
ARRAY_CONTAINS_ANY
: Menyaring entitas yang berisi elemen apa pun dari daftar.
filter="ARRAY_CONTAINS_ANY(history_temperatures, [23, 24])"
ARRAY_LENGTH
: Memfilter berdasarkan panjang larik.
filter="ARRAY_LENGTH(history_temperatures) < 10"
Untuk detail lebih lanjut tentang operator larik, lihat Operator Larik.
Operator khusus bidang VARCHAR
Operator Text_Match
memungkinkan pengambilan dokumen yang tepat berdasarkan istilah kueri tertentu. Operator ini sangat berguna untuk pencarian terfilter yang menggabungkan filter skalar dengan pencarian kemiripan vektor. Tidak seperti pencarian semantik, Pencocokan Teks berfokus pada kemunculan istilah yang tepat.
Milvus menggunakan Tantivy untuk mendukung pengindeksan terbalik dan pencarian teks berbasis istilah. Prosesnya melibatkan.
Penganalisis: Memberi tanda dan memproses teks masukan.
Pengindeksan: Membuat indeks terbalik yang memetakan token unik ke dokumen.
Untuk lebih jelasnya, lihat Pencocokan Teks.