All Products
Search
Document Center

OpenSearch:Pengenalan UDF

Last Updated:Jun 19, 2026

OpenSearch menyediakan user-defined functions (UDF) bawaan untuk pencocokan bidang, pengambilan indeks, pemetaan nilai, pemeriksaan rentang, dan normalisasi skor.

Daftar UDF

Nama fungsi

Deskripsi

contain

Memeriksa apakah nilai bidang terdapat dalam kumpulan yang diberikan. Mendukung nilai tunggal dan multiple.

notcontain

Memeriksa apakah nilai bidang tidak terdapat dalam kumpulan yang diberikan. Mendukung nilai tunggal dan multiple.

MATCHINDEX

Menjalankan kueri terhadap inverted index dari bidang tertentu menggunakan kondisi yang diberikan.

QUERY

Menjalankan kueri terhadap inverted index menggunakan kondisi yang diberikan. Menggunakan sintaks kueri HA3 asli.

hashcombine

Menggabungkan beberapa nilai int64 menjadi satu nilai int64.

rangevalue

Memetakan nilai kontinu ke nilai diskret.

range

Memeriksa apakah nilai bidang berada dalam interval tertentu.

normalizescore

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 100
USE_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 notcontain untuk 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 100
    USE_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 MATCHINDEX untuk mengambil catatan di mana bidang inverted index title mengandung 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 QUERY untuk mencari item di mana bidang title mengandung "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 rangevalue untuk 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.   |