OpenSearch menyediakan user-defined functions (UDF) bawaan untuk pencocokan bidang, pengambilan indeks, pemetaan nilai, pemeriksaan rentang, dan normalisasi skor.
Daftar UDF
|
Nama fungsi |
Deskripsi |
|
Memeriksa apakah nilai bidang terdapat dalam kumpulan yang diberikan. Mendukung nilai tunggal dan multiple. |
|
|
Memeriksa apakah nilai bidang tidak terdapat dalam kumpulan yang diberikan. Mendukung nilai tunggal dan multiple. |
|
|
Menjalankan kueri terhadap inverted index dari bidang tertentu menggunakan kondisi yang diberikan. |
|
|
Menjalankan kueri terhadap inverted index menggunakan kondisi yang diberikan. Menggunakan sintaks kueri HA3 asli. |
|
|
Menggabungkan beberapa nilai int64 menjadi satu nilai int64. |
|
|
Memetakan nilai kontinu ke nilai diskret. |
|
|
Memeriksa apakah nilai bidang berada dalam interval tertentu. |
|
|
Menormalisasi nilai bidang. |
Contoh pengambilan
Ambil seluruh konten tabel
SELECT nid, price, brand, size FROM phone ORDER BY nid LIMIT 1000 USE_TIME: 0.881, ROW_COUNT: 10
------------------------------- TABLE INFO ---------------------------
nid | price | brand | size |
1 | 3599 | Huawei | 5.9 |
2 | 4388 | Huawei | 5.5 |
3 | 899 | Xiaomi | 5 |
4 | 2999 | OPPO | 5.5 |
5 | 1299 | Meizu | 5.5 |
6 | 169 | Nokia | 1.4 |
7 | 3599 | Apple | 4.7 |
8 | 5998 | Apple | 5.5 |
9 | 4298 | Apple | 4.7 |
10 | 5688 | Samsung | 5.6 |
contain
-
Prototipe
boolean contain(INT a, const string b) boolean contain(LITERAL a, const string b) boolean contain(INT_ARRAY a, const string b) boolean contain(LITERAL_ARRAY a, const string b) -
Deskripsi
Memeriksa apakah parameter a mengandung konten yang ditentukan dalam parameter b.
-
Parameter
Parameter a: Parameter input. Tipe data yang didukung adalah INT, LITERAL, INT_ARRAY, dan LITERAL_ARRAY.
Parameter b: Ekspresi string konstan. Anda dapat menggunakan tanda pipa (|) untuk memisahkan beberapa nilai. Fungsi ini mengembalikan true jika salah satu nilai cocok.
-
Nilai kembali
Mengembalikan nilai boolean yang menunjukkan apakah parameter a mengandung kumpulan yang ditentukan dalam parameter b.
-
Contoh
SELECT nid, price, brand, size FROM phone WHERE contain(nid, '1|2|3') ORDER BY nid LIMIT 100USE_TIME: 0.059, ROW_COUNT: 3
------------------------------- TABLE INFO ---------------------------
nid | price | brand | size |
1 | 3599 | Huawei | 5.9 |
2 | 4388 | Huawei | 5.5 |
3 | 899 | Xiaomi | 5 |
notcontain
-
Prototipe
boolean notcontain(INT a, const string b) boolean notcontain(LITERAL a, const string b) boolean notcontain(INT_ARRAY a, const string b) boolean notcontain(LITERAL_ARRAY a, const string b) -
Deskripsi
Memeriksa apakah parameter a tidak mengandung konten yang ditentukan dalam parameter b.
-
Parameter
Parameter a: Parameter input. Tipe data yang didukung adalah INT, LITERAL, INT_ARRAY, dan LITERAL_ARRAY.
Parameter b: Ekspresi string konstan. Anda dapat menggunakan tanda pipa (|) untuk memisahkan beberapa nilai. Fungsi ini mengembalikan true jika tidak ada nilai yang cocok.
-
Nilai kembali
Mengembalikan nilai boolean yang menunjukkan apakah parameter a tidak berada dalam kumpulan yang ditentukan oleh parameter b.
-
Contoh
Gunakan fungsi
notcontainuntuk mengambil semua catatan di mana nilai bidang `nid` tidak berada dalam rentang [1, 2, 3].SELECT nid, price, brand, size FROM phone WHERE notcontain(nid, '1|2|3') ORDER BY nid LIMIT 100USE_TIME: 0.092, ROW_COUNT: 7 ------------------------------- TABLE INFO --------------------------- nid | price | brand | size | 4 | 2999 | OPPO | 5.5 | 5 | 1299 | Meizu | 5.5 | 6 | 169 | Nokia | 1.4 | 7 | 3599 | Apple | 4.7 | 8 | 5998 | Apple | 5.5 | 9 | 4298 | Apple | 4.7 | 10 | 5688 | Samsung | 5.6 |
MATCHINDEX
-
Prototipe
boolean MATCHINDEX(const string a, const string b) -
Deskripsi
Memeriksa apakah bidang a mengandung konten yang ditentukan dalam b. Fungsi ini digunakan untuk pengambilan indeks bidang tunggal.
Hanya digunakan untuk akselerasi dan optimasi inverted index selama fase pengambilan pada tabel indeks. Dapat digunakan dalam klausa WHERE.
-
Parameter
Parameter a: String konstan yang menentukan bidang tempat inverted index dibuat untuk optimasi.
Parameter b: String konstan yang menentukan konten yang akan dicari.
Nilai Parameter b dicari sebagai satu string utuh.
-
Nilai kembali
Mengembalikan nilai boolean yang menunjukkan apakah bidang a mengandung konten yang ditentukan dalam parameter b.
-
Contoh
Gunakan fungsi
MATCHINDEXuntuk mengambil catatan di mana bidang inverted indextitlemengandung kata kunci "camera".SELECT nid, brand FROM phone WHERE MATCHINDEX('title', 'camera')------------------------------- TABLE INFO --------------------------- nid | brand | 1 | Huawei |
QUERY
-
Prototipe
boolean QUERY(const string a, const string b) -
Deskripsi
Memeriksa apakah bidang a mengandung konten yang ditentukan dalam b. Fungsi ini menyediakan kemampuan tokenisasi dan pengambilan otomatis.
Fungsi ini memungkinkan Anda menggunakan sintaks kueri HA3 asli dalam mode SQL.
Hanya digunakan untuk akselerasi dan optimasi inverted index selama fase pengambilan pada tabel indeks. Dapat digunakan dalam klausa WHERE.
-
Parameter
Parameter a: String konstan yang menentukan bidang indeks default.
Parameter b: Konstanta string yang menyediakan ekspresi kueri.
Parameter ini diurai oleh parser kueri dan mendukung indeks rentang.
-
Nilai kembali
Mengembalikan nilai boolean yang menunjukkan apakah bidang a mengandung konten yang ditentukan dalam parameter b.
-
Contoh
Gunakan fungsi
QUERYuntuk mencari item di mana bidangtitlemengandung "Huawei phone".
SELECT nid, price, brand, size FROM phone WHERE QUERY(title, 'Huawei phone')USE_TIME: 0.034, ROW_COUNT: 1
------------------------------- TABLE INFO ---------------------------
nid | price | brand | size |
2 | 4388 | Huawei | 5.5 |
Gunakan kondisi gabungan untuk mengambil item di mana bidang `title` mengandung "Huawei phone" atau "OPPO phone".
SELECT nid, price, brand, size FROM phone
WHERE QUERY(title, 'Huawei phone OR OPPO phone')USE_TIME: 0.03, ROW_COUNT: 2
------------------------------- TABLE INFO ---------------------------
nid | price | brand | size |
2 | 4388 | Huawei | 5.5 |
4 | 2999 | OPPO | 5.5 |
Catatan:
Parameter kedua dari UDF QUERY diurai oleh parser sintaks kueri HA3. Jika parameter kedua adalah string konstan, tanda kutip tunggal di sekitarnya dihapus sebelum string tersebut diteruskan ke parser kueri HA3. Misalnya, `QUERY(title, 'Huawei phone OPPO phone')` setara dengan kueri HA3 `query=Huawei phone OPPO phone`. Untuk menyertakan tanda kutip dalam kueri, seperti pada string kueri HA3 `query='Huawei phone' AND 'OPPO phone'`, gunakan ekspresi `QUERY(title, '''Huawei phone'' AND ''OPPO phone''')`. Untuk informasi lebih lanjut tentang string konstan dalam pernyataan SQL, lihat bagian 'Constant strings' di Limits.
Kesalahan umum:
|
Jenis kesalahan |
Format salah |
Format benar |
|
Kesalahan sintaks. Kueri tidak mengembalikan hasil. |
QUERY('pidvid','123:456') |
QUERY('pidvid','"123:456"') |
rangevalue
-
Prototipe
float rangevalue(float v, string desc) -
Deskripsi
Memetakan nilai kontinu ke nilai diskret.
-
Parameter
Parameter v: Kolom yang berisi nilai kontinu.
Parameter desc: Aturan pemetaan.
-
Nilai kembali
Nilai diskret hasil pemetaan.
-
Contoh
Gunakan fungsi
rangevalueuntuk memetakan nilai bidang `price`. Nilai kurang dari atau sama dengan 1000 dipetakan ke 1.0. Nilai lebih dari 1000 dan kurang dari atau sama dengan 5000 dipetakan ke 2.0. Nilai lain tidak dipetakan dan mempertahankan nilai aslinya.SELECT rangevalue(price,'(,1000]:1.0;(1000,5000]:2.0') FROM phone;
range
-
Prototipe:
boolean range(INT v, const string rangeDesc) boolean range(FLOAT v, const string rangeDesc) boolean range(DOUBLE v, const string rangeDesc) -
Deskripsi
Memeriksa apakah nilai bidang forward index berada dalam interval tertentu.
-
Parameter
Parameter v: Bidang, yang mendukung tipe numerik bernilai tunggal.
Parameter rangeDesc: Konstanta yang menentukan rentang numerik. Interval terbuka, tertutup, dan semi-terbuka didukung.
-
Nilai kembali
Mengembalikan nilai boolean yang menunjukkan apakah v berada dalam rentang yang ditentukan oleh rangeDesc. Tabel berikut mencantumkan ekspresi yang didukung beserta nilai kembalinya.
|
Pemanggilan contoh |
Nilai kembali |
|
range(v, "[0, 100]") |
0<=v<=100 |
|
range(v, "(0, 100)") |
0<v<100 |
|
range(v, "[0, 100)") |
0<=v<100 |
|
range(v, "(0, 100]") |
0<v<=100 |
|
range(v, "(0,)") range(v, "(0,]") |
0<v |
|
range(v, "[0,)") range(v, "[0,]") |
0<=v |
|
range(v, "(,100)") range(v, "[,100)") |
v<100 |
|
range(v, "(,100]") range(v, "[,100]") |
v<=100 |
|
range(v, "(,)") range(v, "[,]") range(v, "[,)") range(v, "(,]") |
true |
Catatan: Parameter `rangeDesc` juga mendukung penggunaan tanda seru (!) di awal string untuk menegasikan interval yang ditentukan.
-
Contoh
Gunakan fungsi
range:SELECT nid FROM phone where range(price,"(127.0,30.0)") SELECT nid FROM phone where range(price,"!(127.0,30.0)")Catatan: `range` adalah kata kunci SQL yang dicadangkan dan harus di-escape.
normalizescore
-
Prototipe
double normalizescore(INT v, const double defaultScore) double normalizescore(FLOAT v, const double defaultScore) double normalizescore(DOUBLE v, const double defaultScore) -
Deskripsi
Menormalisasi nilai bidang input v ke tipe data double. Jika bidang tidak diinisialisasi, skor default digunakan.
-
Parameter
Parameter v: Bidang, yang mendukung tipe numerik bernilai tunggal.
Parameter defaultScore: Konstanta yang menentukan skor default. Harus berupa string yang dapat dikonversi ke nilai double yang valid.
-
Nilai kembali
Mengembalikan nilai asli v jika v diinisialisasi. Jika tidak, mengembalikan nilai
defaultScore. -
Contoh
Untuk tiga dokumen yang memiliki bidang `price`, konten aslinya sebagai berikut:
doc1: price=1.0
doc2: price= (tidak diinisialisasi)
doc3: price=2.0
Jalankan
select normalizescore(price, "1000.0") as normalized_score from phone
USE_TIME: 32.141ms, ROW_COUNT: 2
------------------------------- TABLE INFO ---------------------------
normalized_score(double) |
1.0 |
1000.0 |
2.0. |