Klausa filter memungkinkan Anda menentukan kondisi filter berdasarkan kebutuhan bisnis untuk mencari dokumen. Klausa ini dapat digunakan untuk menyaring dokumen yang di-query guna mengambil dokumen yang relevan.
Sintaksis
Format kondisi filter: field=value.
Kondisi filter mendukung operator kondisional umum seperti >, <, =, <=, >=, !=, in, dan notin, serta operator aritmatika seperti +, -, *, /, &, ^, dan |.
Anda dapat menentukan beberapa kondisi filter dan menghubungkannya menggunakan operator logika berikut: AND, OR, dan (). Operator logika harus ditulis dalam huruf besar.
Catatan penggunaan
Klausa filter bersifat opsional.
Bidang yang ditentukan dalam parameter klausa filter harus dikonfigurasi sebagai bidang atribut saat mendefinisikan skema aplikasi.
Sistem tidak dapat memeriksa kesetaraan nilai tipe FLOAT atau DOUBLE karena masalah presisi. Jika bidang tipe FLOAT atau DOUBLE diperlukan dalam klausa filter, gunakan ekspresi dengan operator lebih dari (>) dan kurang dari (<) untuk menentukan hubungan.
Nilai tipe LITERAL harus diapit dalam tanda kutip ganda ('') dalam klausa filter. Bidang tipe LITERAL mendukung operasi relasional tetapi tidak mendukung operasi aritmatika. Jika nilai tipe LITERAL tidak diapit dalam tanda kutip ganda (''), sistem akan mengembalikan kode kesalahan 6135 dengan pesan: Tipe nilai dari ekspresi konstan tidak valid.
Anda dapat menggunakan fungsi fungsionalitas seperti fungsi jarak dalam klausa filter untuk pengurutan.
Gunakan operator kesetaraan (=) atau ketidaksetaraan (!=) dalam ekspresi yang berisi bidang tipe LITERAL. Operator lebih dari (>) atau kurang dari (<) tidak didukung untuk bidang tipe LITERAL karena pencocokan tepat diperlukan.
Fungsi in atau notin dapat digunakan untuk memeriksa apakah nilai bidang ada dalam daftar tertentu. Hanya bidang tipe INT, LITERAL, FLOAT, dan DOUBLE yang didukung. Bidang tipe ARRAY dan TEXT, serta analisis untuk pencarian fuzzy, tidak didukung. Untuk informasi lebih lanjut, lihat in dan notin.
Anda tidak dapat membuat bidang atribut menggunakan bidang tipe teks, seperti TEXT dan SHORT_TEXT. Anda hanya dapat membuat bidang atribut menggunakan bidang tipe numerik atau non-teks, seperti INT, INT_ARRAY, FLOAT, FLOAT_ARRAY, DOUBLE, DOUBLE_ARRAY, LITERAL, dan LITERAL_ARRAY.
Fungsi fungsionalitas yang didukung
distance: Mengembalikan jarak bola antara dua titik. Fungsi ini sering digunakan dalam perhitungan jarak untuk layanan berbasis lokasi (LBS).
Contoh:
Cari KFC dalam radius 10 kilometer dari koordinat pengguna. Dalam contoh ini, bujur dan lintang koordinat pengguna adalah 120.34256 dan 30.56982. Bidang lon dan lat yang menunjukkan bujur dan lintang KFC harus dikonfigurasi sebagai bidang atribut.
query=default:'KFC'&&filter=distance(lon,lat,"120.34256","30.56982")<10in_polygon: Memeriksa apakah suatu titik berada dalam area geografis poligon tertentu. Fungsi ini umumnya digunakan untuk menentukan apakah pengguna berada dalam radius pengiriman pedagang.
Contoh:
Periksa apakah pengguna berada dalam radius pengiriman pedagang. Misalnya, bidang koordinat menentukan radius pengiriman pedagang, dan koordinat pengguna adalah (120.307234, 39.294245). Gunakan klausa query berikut untuk mencari pedagang yang mendukung radius pengiriman:
query=default:'Makanan'&&filter=in_polygon(coordinates, 120.307234, 39.294245)>0in_query_polygon: Memeriksa apakah titik yang ditentukan dalam dokumen berada dalam area geografis poligon tertentu.
Contoh:
Cari KFC di distrik bisnis Yintai (xA,yA,xB,Yb,xC,Yc;xD,yD,xE,yE,xF,yF,xG,yG). Bidang point digunakan untuk menyimpan lokasi geografis KFC.
query=default:'KFC'&&filter=in_query_polygon("polygons",point)>0&&kvpairs=polygons:xA\,yA\,xB\,Yb\,xC\,Yc;xD\,yD\,xE\,yE\,xF\,yF\,xG\,yGbit_struct: Membagi setiap nilai menjadi beberapa bagian untuk bidang tipe INT_ARRAY dan melakukan operasi tertentu pada bagian-bagian tersebut.
Contoh:
Cari toko yang buka pada periode waktu tertentu. Dokumen memiliki bidang open_time tipe INT_ARRAY. Setiap bilangan bulat 64-bit dalam array menentukan jam operasional toko. 32 bit pertama menentukan waktu toko dibuka, dan 32 bit terakhir menentukan waktu toko ditutup. Untuk mencari toko yang buka dari pukul 14:00 hingga 15:30, konversikan masing-masing waktu ke jumlah menit sejak pukul 00:00. Dalam contoh ini, 14:00 menjadi 840, dan 15:30 menjadi 930.
filter=bit_struct(open_time, "0-31,32-63","overlap,$1,$2,840,930")!=-1fieldlen: Menghitung panjang nilai bidang tipe LITERAL.
Contoh:
Cari dokumen di mana nilai bidang usr_name tidak kosong.
query=default:'Kata kunci'&&filter=fieldlen(usr_name)>0in atau notin: Memeriksa apakah nilai bidang ada dalam daftar tertentu.
Contoh:
Ambil dokumen yang berisi "iPhone" dan bidang type yang nilainya 1, 2, atau 3. Bidang type bertipe INT.
query=default:'iphone'&&filter=in(type, "1|2|3")Ambil dokumen yang berisi "iPhone" dan bidang type yang nilainya bukan 1, 2, atau 3. Bidang type bertipe INT32.
query=default:'iphone'&&filter=notin(type, "1|2|3")multi_attr: Mengembalikan nilai bidang array tertentu pada posisi tertentu.
Contoh:
Barang memiliki beberapa harga, termasuk harga pasar, harga diskon, dan harga penjualan. Harga dicatat dalam bidang prices. Gunakan klausa query berikut untuk mencari ponsel yang harga jualnya kurang dari 1.000:
query=default:'Ponsel'&&filter=multi_attr(price,2)<1000Contoh-contoh
Bidang category tipe INT32 dalam aplikasi memiliki nilai seperti 1 (berita) dan 2 (bbs). Gunakan salah satu klausa query berikut untuk mencari dokumen yang berisi "Universitas Zhejiang" dan di mana bidang category disetel ke 2:
query=default:'Universitas Zhejiang' AND category_search:'2' // Bidang indeks category_search dibuat untuk bidang category. // Atau query=default:'Universitas Zhejiang'&&filter=category=2Dalam aplikasi untuk mencari novel, bidang tags tipe STRING_ARRAY menentukan tag berikut berdasarkan gaya novel: istana, suspense dan horor, dan romansa. Gunakan klausa query berikut untuk mencari dokumen yang berisi "Empresses in the palace" dan di mana bidang tags memiliki nilai "istana":
query=default:'Empresses in the palace'&&filter=tags="istana"Bidang hit dan sale tipe INT32 serta bidang create_time tipe INT64 ada dalam aplikasi e-commerce. Gunakan klausa query berikut untuk mencari dokumen yang memenuhi kondisi berikut: 1. Dokumen berisi "dress". 2. Hasil kali nilai bidang rate dan jumlah nilai bidang hit dan sale melebihi 10.000. 3. Nilai bidang create_time kurang dari 1.402.345.600.
query=default:'dress'&&filter=(hit+sale)*rate>10000 AND create_time<1402345600