Operator Dasar
Milvus menyediakan serangkaian operator dasar yang kaya untuk membantu Anda memfilter dan menanyakan data secara efisien. Operator-operator ini memungkinkan Anda untuk mempersempit kondisi pencarian Anda berdasarkan bidang skalar, perhitungan numerik, kondisi logika, dan banyak lagi. Memahami cara menggunakan operator-operator ini sangat penting untuk membuat kueri yang tepat dan memaksimalkan efisiensi pencarian Anda.
Operator perbandingan
Operator perbandingan digunakan untuk memfilter data berdasarkan persamaan, ketidaksamaan, atau ukuran. Operator ini dapat digunakan untuk bidang numerik dan teks.
Operator Perbandingan yang Didukung:
==(Sama dengan)!=(Tidak sama dengan)>(Lebih besar dari)<(Kurang dari)>=(Lebih besar dari atau sama dengan)<=(Kurang dari atau sama dengan)
Contoh 1: Memfilter dengan Sama Dengan (==)
Asumsikan Anda memiliki sebuah bidang bernama status dan Anda ingin menemukan semua entitas di mana status "aktif". Anda dapat menggunakan operator penyetaraan ==:
filter = 'status == "active"'
Contoh 2: Memfilter dengan Tidak Sama Dengan (!=)
Untuk menemukan entitas di mana status tidak "tidak aktif":
filter = 'status != "inactive"'
Contoh 3: Memfilter dengan Lebih Besar Dari (>)
Jika Anda ingin menemukan semua entitas dengan age lebih besar dari 30:
filter = 'age > 30'
Contoh 4: Memfilter dengan Kurang Dari
Untuk menemukan entitas dengan price kurang dari 100:
filter = 'price < 100'
Contoh 5: Memfilter dengan Lebih Besar Dari atau Sama Dengan (>=)
Jika Anda ingin menemukan semua entitas dengan rating lebih besar dari atau sama dengan 4:
filter = 'rating >= 4'
Contoh 6: Memfilter dengan Kurang Dari atau Sama Dengan
Untuk menemukan entitas dengan discount kurang dari atau sama dengan 10%:
filter = 'discount <= 10'
Operator rentang
Operator rentang membantu memfilter data berdasarkan set atau rentang nilai tertentu.
Operator Rentang yang Didukung:
IN: Digunakan untuk mencocokkan nilai dalam set atau rentang tertentu.LIKE: Digunakan untuk mencocokkan sebuah pola (kebanyakan untuk bidang teks). Milvus memungkinkan Anda untuk membuat indeksNGRAMpada bidang VARCHAR atau JSON untuk mempercepat kueri teks. Untuk detailnya, lihat NGRAM.
Contoh 1: Menggunakan IN untuk Mencocokkan Beberapa Nilai
Jika Anda ingin menemukan semua entitas di mana color berwarna "merah", "hijau", atau "biru":
filter = 'color in ["red", "green", "blue"]'
Ini berguna ketika Anda ingin memeriksa keanggotaan dalam daftar nilai.
Contoh 2: Menggunakan LIKE untuk Pencocokan Pola
Operator LIKE digunakan untuk pencocokan pola dalam bidang string. Operator ini dapat mencocokkan substring di berbagai posisi dalam teks: sebagai awalan, akhiran, atau akhiran. Operator LIKE menggunakan simbol % sebagai wildcard, yang dapat mencocokkan sejumlah karakter (termasuk nol).
Dalam banyak kasus, pencocokan infiks atau sufiks secara signifikan lebih lambat daripada pencocokan awalan. Gunakan dengan hati-hati jika kinerja sangat penting.
Pencocokan Awalan (Dimulai dengan)
Untuk melakukan pencocokan awalan, di mana string dimulai dengan pola tertentu, Anda dapat menempatkan pola di awal dan menggunakan % untuk mencocokkan karakter apa pun yang mengikutinya. Misalnya, untuk menemukan semua produk yang name -nya dimulai dengan "Prod":
filter = 'name LIKE "Prod%"'
Ini akan mencocokkan semua produk yang namanya dimulai dengan "Prod", seperti "Produk A", "Produk B", dll.
Pencocokan Akhiran (Berakhiran dengan)
Untuk pencocokan akhiran, di mana string diakhiri dengan pola tertentu, letakkan simbol % di awal pola. Misalnya, untuk menemukan semua produk yang name -nya diakhiri dengan "XYZ":
filter = 'name LIKE "%XYZ"'
Ini akan mencocokkan semua produk yang namanya diakhiri dengan "XYZ", seperti "ProductXYZ", "SampleXYZ", dll.
Pencocokan Infiks (Berisi)
Untuk melakukan pencocokan infix, di mana pola dapat muncul di mana saja dalam string, Anda dapat menempatkan simbol % di awal dan akhir pola. Misalnya, untuk menemukan semua produk yang name -nya mengandung kata "Pro":
filter = 'name LIKE "%Pro%"'
Ini akan mencocokkan semua produk yang namanya mengandung substring "Pro", seperti "Produk", "ProLine", atau "SuperPro".
Operator Aritmatika
Operator aritmatika memungkinkan Anda untuk membuat kondisi berdasarkan perhitungan yang melibatkan bidang numerik.
Operator Aritmatika yang Didukung:
+(Penambahan)-(Pengurangan)*(Perkalian)/(Pembagian)%(Modulus)**(Eksponensial)
Contoh 1: Menggunakan Modulus (%)
Untuk menemukan entitas di mana id adalah bilangan genap (yaitu, habis dibagi 2):
filter = 'id % 2 == 0'
Contoh 2: Menggunakan Eksponensial (**)
Untuk menemukan entitas di mana price yang dipangkatkan dengan pangkat 2 lebih besar dari 1000:
filter = 'price ** 2 > 1000'
Operator Logika
Operator logika digunakan untuk menggabungkan beberapa kondisi ke dalam ekspresi filter yang lebih kompleks. Operator ini termasuk AND, OR, dan NOT.
Operator Logika yang didukung:
AND: Menggabungkan beberapa kondisi yang semuanya harus benar.OR: Menggabungkan kondisi di mana setidaknya satu kondisi harus benar.NOT: Meniadakan sebuah kondisi.
Contoh 1: Menggunakan AND untuk Menggabungkan Kondisi
Untuk menemukan semua produk di mana price lebih besar dari 100 dan stock lebih besar dari 50:
filter = 'price > 100 AND stock > 50'
Contoh 2: Menggunakan OR untuk Menggabungkan Kondisi
Untuk menemukan semua produk di mana color adalah "merah" atau "biru":
filter = 'color == "red" OR color == "blue"'
Contoh 3: Menggunakan NOT untuk Mengecualikan Kondisi
Untuk menemukan semua produk di mana color tidak berwarna "hijau":
filter = 'NOT color == "green"'
Operator IS NULL dan IS NOT NULL
Operator IS NULL dan IS NOT NULL digunakan untuk memfilter bidang berdasarkan apakah bidang tersebut mengandung nilai null (tidak ada data).
IS NULL: Mengidentifikasi entitas di mana bidang tertentu berisi nilai null, yaitu nilai tidak ada atau tidak terdefinisi.IS NOT NULL: Mengidentifikasi entitas di mana bidang tertentu berisi nilai apa pun selain null, yang berarti bidang tersebut memiliki nilai yang valid dan terdefinisi.
Operator ini tidak peka huruf besar-kecil, sehingga Anda bisa menggunakan IS NULL atau is null, dan IS NOT NULL atau is not null.
Bidang Skalar Biasa dengan Nilai Nol
Milvus memungkinkan pemfilteran pada bidang skalar biasa, seperti string atau angka, dengan nilai nol.
String kosong "" tidak diperlakukan sebagai nilai nol untuk bidang VARCHAR.
Untuk mengambil entitas di mana bidang description bernilai null:
filter = 'description IS NULL'
Untuk mengambil entitas yang bidang description tidak bernilai null:
filter = 'description IS NOT NULL'
Untuk mengambil entitas yang bidang description tidak bernilai null dan bidang price lebih tinggi dari 10:
filter = 'description IS NOT NULL AND price > 10'
Bidang JSON dengan Nilai Nol
Milvus memungkinkan pemfilteran pada bidang JSON yang mengandung nilai null. Bidang JSON diperlakukan sebagai null dengan cara berikut ini:
Seluruh objek JSON secara eksplisit disetel ke None (null), misalnya,
{"metadata": None}.Bidang JSON itu sendiri benar-benar hilang dari entitas.
Jika beberapa elemen dalam objek JSON bernilai null (misalnya kunci individual), bidang tersebut masih dianggap non-null. Sebagai contoh, \{"metadata": \{"category": None, "price": 99.99}} tidak dianggap sebagai null, meskipun key category adalah null.
Untuk mengilustrasikan lebih lanjut bagaimana Milvus menangani field JSON dengan nilai null, pertimbangkan contoh data berikut ini dengan field JSON metadata:
data = [
{
"metadata": {"category": "electronics", "price": 99.99, "brand": "BrandA"},
"pk": 1,
"embedding": [0.12, 0.34, 0.56]
},
{
"metadata": None, # Entire JSON object is null
"pk": 2,
"embedding": [0.56, 0.78, 0.90]
},
{ # JSON field `metadata` is completely missing
"pk": 3,
"embedding": [0.91, 0.18, 0.23]
},
{
"metadata": {"category": None, "price": 99.99, "brand": "BrandA"}, # Individual key value is null
"pk": 4,
"embedding": [0.56, 0.38, 0.21]
}
]
Contoh 1: Mengambil entitas yang metadatanya bernilai null
Untuk menemukan entitas di mana bidang metadata tidak ada atau secara eksplisit disetel ke None:
filter = 'metadata IS NULL'
# Example output:
# data: [
# "{'metadata': None, 'pk': 2}",
# "{'metadata': None, 'pk': 3}"
# ]
Contoh 2: Mengambil entitas yang metadatanya tidak nol
Untuk menemukan entitas yang bidang metadata tidak bernilai null:
filter = 'metadata IS NOT NULL'
# Example output:
# data: [
# "{'metadata': {'category': 'electronics', 'price': 99.99, 'brand': 'BrandA'}, 'pk': 1}",
# "{'metadata': {'category': None, 'price': 99.99, 'brand': 'BrandA'}, 'pk': 4}"
# ]
Bidang ARRAY dengan Nilai Nol
Milvus memungkinkan pemfilteran pada bidang ARRAY yang berisi nilai null. Bidang ARRAY diperlakukan sebagai nilai null dengan cara berikut:
Seluruh bidang ARRAY secara eksplisit disetel ke None (null), misalnya,
"tags": None.Bidang ARRAY benar-benar hilang dari entitas.
Bidang ARRAY tidak dapat berisi nilai null parsial karena semua elemen dalam bidang ARRAY harus memiliki tipe data yang sama. Untuk detailnya, lihat Bidang Array.
Untuk mengilustrasikan lebih lanjut bagaimana Milvus menangani field ARRAY dengan nilai null, pertimbangkan contoh data berikut ini dengan field ARRAY tags:
data = [
{
"tags": ["pop", "rock", "classic"],
"ratings": [5, 4, 3],
"pk": 1,
"embedding": [0.12, 0.34, 0.56]
},
{
"tags": None, # Entire ARRAY is null
"ratings": [4, 5],
"pk": 2,
"embedding": [0.78, 0.91, 0.23]
},
{ # The tags field is completely missing
"ratings": [9, 5],
"pk": 3,
"embedding": [0.18, 0.11, 0.23]
}
]
Contoh 1: Mengambil entitas yang tag-nya bernilai null
Untuk mengambil entitas di mana bidang tags tidak ada atau secara eksplisit disetel ke None:
filter = 'tags IS NULL'
# Example output:
# data: [
# "{'tags': None, 'ratings': [4, 5], 'embedding': [0.78, 0.91, 0.23], 'pk': 2}",
# "{'tags': None, 'ratings': [9, 5], 'embedding': [0.18, 0.11, 0.23], 'pk': 3}"
# ]
Contoh 2: Mengambil entitas yang tagnya tidak bernilai null
Untuk mengambil entitas yang bidang tags tidak bernilai null:
filter = 'tags IS NOT NULL'
# Example output:
# data: [
# "{'metadata': {'category': 'electronics', 'price': 99.99, 'brand': 'BrandA'}, 'pk': 1}",
# "{'metadata': {'category': None, 'price': 99.99, 'brand': 'BrandA'}, 'pk': 4}"
# ]
Tips Menggunakan Operator Dasar dengan JSON dan Bidang ARRAY
Meskipun operator dasar di Milvus bersifat serbaguna dan dapat diterapkan pada bidang skalar, operator ini juga dapat digunakan secara efektif dengan kunci dan indeks di bidang JSON dan ARRAY.
Sebagai contoh, jika Anda memiliki bidang product yang berisi beberapa kunci seperti price, model, dan tags, selalu rujuk kunci secara langsung:
filter = 'product["price"] > 1000'
Untuk menemukan catatan di mana suhu pertama dalam larik suhu yang direkam melebihi nilai tertentu, gunakan:
filter = 'history_temperatures[0] > 30'
Kesimpulan
Milvus menawarkan berbagai operator dasar yang memberikan fleksibilitas dalam memfilter dan menanyakan data Anda. Dengan menggabungkan operator perbandingan, rentang, aritmatika, dan logika, Anda dapat membuat ekspresi filter yang kuat untuk mempersempit hasil pencarian dan mengambil data yang Anda butuhkan secara efisien.
PERTANYAAN UMUM
Apakah ada batasan panjang daftar nilai kecocokan dalam kondisi filter (misalnya, filter = 'warna dalam ["merah", "hijau", "biru"]')? Apa yang harus saya lakukan jika daftarnya terlalu panjang?
Zilliz Cloud tidak memberikan batasan panjang pada daftar nilai kecocokan dalam kondisi filter. Namun, daftar yang terlalu panjang dapat mempengaruhi kinerja kueri secara signifikan. Jika kondisi filter Anda menyertakan daftar nilai kecocokan yang panjang atau ekspresi kompleks dengan banyak elemen, kami sarankan untuk menggunakan Filter Templating untuk meningkatkan kinerja kueri.