All Products
Search
Document Center

:tag_match

Last Updated:May 26, 2026

Kompatibilitas

Fungsi ini dapat digunakan dalam ekspresi filter, sort, dan formula.

Bidang dokumen yang digunakan sebagai parameter fungsi harus dibuat sebagai atribut.

tag_match: Pencocokan tag untuk skoring

1. Ikhtisar

Fungsi tag_match memenuhi berbagai kebutuhan pencocokan antara kueri dan dokumen, serta sangat berguna untuk mempersonalisasi hasil pencarian. Misalnya, Anda dapat memprioritaskan toko favorit pengguna atau menampilkan berita olahraga dan hiburan sesuai preferensi pengguna. Fungsi dasar tag_match adalah menyimpan serangkaian pasangan kunci-nilai dalam bidang array suatu dokumen. Informasi kunci-nilai yang sesuai kemudian diteruskan dalam kueri melalui klausa kvpairs. Fungsi tag_match mencari dokumen berdasarkan kunci yang ditentukan dalam kueri, menghitung skor untuk setiap kunci yang cocok, lalu menggabungkan skor tersebut menjadi skor akhir. Hasil ini dapat digunakan untuk skoring dan pembobotan maupun filtering.

Proses perhitungan adalah sebagai berikut:

2. Penggunaan

Sintaks Dasar:

tag_match(query_key, doc_field, kv_op, merge_op)

Sintaks Lanjutan:

tag_match(query_key, doc_field, kv_op, merge_op, has_default, doc_kv, max_kv_count)

3. Parameter

  • query_key: Menentukan pasangan kunci-nilai dari kueri yang digunakan untuk pencocokan. Pasangan ini diteruskan melalui klausa kvpairs. Kunci dan nilai dipisahkan oleh tanda sama dengan (=), sedangkan beberapa pasangan kunci-nilai dipisahkan oleh titik dua (:). Contohnya, kvpairs=query_tags:10=0.67:960=0.85:1=48 menunjukkan bahwa parameter query_tags berisi tiga elemen (10, 960, dan 1) dengan nilai yang sesuai (0.67, 0.85, dan 48). Kueri juga dapat hanya berisi daftar kunci, seperti kvpairs=cats:10:960:1.

  • doc_field: Menentukan bidang dalam dokumen yang menyimpan pasangan kunci-nilai. Bidang ini harus berupa array integer (int_array) atau array bilangan titik mengambang (float_array, double_array). Jika menggunakan array bilangan titik mengambang, nilai kuncinya di-cast ke int64 untuk pencocokan. Array tersebut menyimpan kunci dan nilai secara bergantian: [key0, value0, key1, value1, ...]. Kunci berada pada indeks genap (0, 2, dst.), dan nilai yang sesuai berada pada indeks ganjil berikutnya.

  • kv_op: Operasi yang dilakukan terhadap nilai kunci kueri dan dokumen saat keduanya cocok. Operator yang didukung meliputi: max (maksimum), min (minimum), sum (jumlah), avg (rata-rata), mul (hasil kali), query_value (menggunakan nilai dari kunci kueri), doc_value (menggunakan nilai dari dokumen), dan number (konstanta yang ditentukan).

  • merge_op: Menggabungkan hasil dari beberapa pencocokan kunci. Operator yang didukung meliputi: max (maksimum), min (minimum), sum (jumlah), avg (rata-rata), dan first_match (menggunakan hasil perhitungan kv_op pertama dan mengabaikan sisanya).

  • has_default: Nilai boolean yang menentukan apakah akan menggunakan skor awal. Nilai default-nya adalah false. Jika diatur ke true, nilai pertama dalam doc_field diperlakukan sebagai nilai default, mirip dengan skor dasar. Strukturnya menjadi [init_score, k0, v0, k1, v1, ...].

  • doc_kv: Nilai boolean yang menentukan struktur doc_field. Nilai default-nya adalah true, yang berarti bidang tersebut berisi pasangan kunci-nilai. Jika diatur ke false, bidang tersebut hanya berisi kunci.

  • max_kv_count: Jumlah maksimum pasangan kunci-nilai yang dapat diteruskan dalam kueri. Nilai default-nya adalah 50. Anda dapat menaikkan batas ini, tetapi tidak boleh melebihi 512.

4. Nilai Kembalian

Mengembalikan nilai double yang merepresentasikan skor akhir. Jika has_default bernilai false dan tidak ditemukan kecocokan, fungsi ini mengembalikan 0. Untuk mendapatkan hasil bertipe int64, gunakan fungsi int_tag_match. Fungsi int_tag_match secara fungsional identik dengan tag_match, tetapi tidak dapat digunakan dalam ekspresi peringkat.

5. Kasus Penggunaan

Skenario 1: Dalam forum daring besar, postingan dapat diberi berbagai tag (komedi, olahraga, berita, musik, sains, dll.). Saat mengirim dokumen ke OpenSearch, Anda dapat memberikan ID tag untuk setiap tag (misalnya, komedi: 1, olahraga: 5, berita: 3, musik: 6) dan menyimpan tag-tag tersebut dalam bidang tag. Jika Anda melakukan pra-pemrosesan terhadap postingan, Anda bahkan dapat menentukan bobot untuk setiap tag. Misalnya, sebuah postingan tentang berita olahraga lucu mungkin memiliki bobot komedi 0.5, bobot olahraga 0.5, dan bobot berita 0.1. Bidang tag untuk postingan ini akan berupa [1, 0.5, 5, 0.5, 3, 0.1]. Untuk pengguna terdaftar, Anda dapat mempelajari tag minat mereka seiring waktu.

Sebagai contoh, pengguna bernama nba_fans tertarik pada olahraga dan komedi, dengan bobot masing-masing 0.6 dan 0.3. Saat pengguna ini melakukan kueri, Anda dapat menambahkan informasi ini ke kueri menggunakan klausa kvpairs. Jika klausa kvpairs diberi nama user_tag, nilainya untuk nba_fans akan menjadi 5=0.6:1=0.3. Dengan mengonfigurasi tag_match(user_tag, tag, mul, sum) dalam ekspresi fine-ranking, Anda dapat meningkatkan peringkat postingan yang sesuai dengan minat pengguna.

Dengan parameter kv_op diatur ke mul, fungsi ini mengalikan nilai dari kueri dan dokumen. Skor individual dihitung sebagai berikut: olahraga (0.5 × 0.6 = 0.3) dan komedi (0.5 × 0.3 = 0.15). Dengan parameter merge_op diatur ke sum, fungsi ini menjumlahkan skor olahraga dan komedi (0.3 + 0.15 = 0.45). Skor total ini ditambahkan ke skor peringkat akhir. Dengan cara ini, Anda dapat menerapkan skoring dan pembobotan pada postingan berdasarkan minat pengguna.

Skenario 2:

Produk dapat memiliki beberapa tag atribut, seperti 1 untuk "remaja dewasa" (usia), 2 untuk "paruh baya" (usia), 3 untuk "minimalis" (gaya), 4 untuk "modis" (gaya), 5 untuk "perempuan" (jenis kelamin), dan 6 untuk "laki-laki" (jenis kelamin).

Anggaplah Anda hanya ingin menandai tag produk tanpa memberikan bobot. Anda dapat menyimpan tag-tag ini dalam bidang options. Misalnya, item pakaian modis untuk perempuan muda akan memiliki bidang options berupa [1, 4, 5]. Perhatikan bahwa array ini hanya berisi kunci tag, bukan nilai. Pengguna juga memiliki tag atribut mereka sendiri yang sesuai dengan tag produk. Misalnya, pengguna perempuan muda yang sering membeli pakaian minimalis mungkin memiliki kueri seperti user_options=1:3:5. Perhatikan bahwa klausa kvpairs ini juga hanya berisi kunci tag.

Untuk meningkatkan peringkat produk yang sesuai dengan preferensi tag pengguna, Anda dapat menggunakan tag_match(user_options, options, 10, sum, false, false) dalam formula. Di sini, user_options dan options menentukan informasi tag dari kueri dan dokumen, masing-masing. Parameter kv_op diatur ke nilai konstan 10, sehingga memberikan skor 10 untuk setiap tag yang cocok. Parameter has_default bernilai false karena kita tidak memerlukan nilai awal. Parameter doc_kv bernilai false, yang menunjukkan bahwa bidang dokumen hanya menyimpan kunci.

Saat pengguna perempuan muda tersebut melakukan kueri untuk item pakaian yang dijelaskan di atas, tag "remaja dewasa" dan "perempuan" akan cocok. Skor untuk setiap kecocokan adalah 10. Dengan sum sebagai merge_op, skor boost akhir untuk produk ini adalah 20. Metode ini memungkinkan Anda menerapkan skoring dan pembobotan pada dokumen yang cocok meskipun tanpa informasi bobot tag.

Catatan Penggunaan

  • Bidang yang digunakan sebagai parameter fungsi harus dibuat sebagai atribut.

  • Saat menggunakan tag_match dalam klausa filter atau sort, masukkan parameter query_key, kv_op, merge_op, has_default, dan doc_kv dalam tanda kutip ganda. Contohnya: sort=-tag_match("user_options", options, "mul", "sum", "false", "true", 100).

  • Fungsi tag_match mencocokkan kunci menggunakan perbandingan integer. Oleh karena itu, kunci dalam kueri maupun dokumen harus berupa integer. Jika kunci berupa bilangan titik mengambang, tag_match akan meng-cast-nya ke integer untuk perbandingan.

Contoh

Asumsikan dokumen dapat memiliki 10 jenis tag berikut:

1 - Finance
2 - Technology
3 - Sports
4 - Entertainment
5 - Fashion
6 - Education
7 - Travel
8 - Gaming
9 - Popular Science
10 - Healthcare

Contoh 1: Kata kunci sama, tag berbeda

1Seperti yang ditunjukkan pada gambar di atas, pencarian "battle royale" mengembalikan dua dokumen. Namun, dokumen tersebut memiliki tipe berbeda: 1-Finance dan 8-Gaming. Jika Anda ingin menampilkan dokumen dengan tag "Gaming" terlebih dahulu, Anda dapat mengonfigurasi fungsi tag_match. Bagian berikut menunjukkan cara mengonfigurasi fungsi ini dalam ekspresi peringkat dan klausa sort:

kvpairs: type:8
Ranking expression: tag_match(type, type_arr, 10, max,false,false) 
sort clause: tag_match("type", type_arr, 10, "max","false","false")

Hasil dengan ekspresi peringkat:2Hasil dengan klausa sort:3

Contoh 2: Skor gabungan untuk beberapa tag (untuk personalisasi pengguna)

4Seperti yang ditunjukkan pada gambar, ketika tag utama sama, Anda perlu mencocokkan skor tag sekunder. Contoh berikut menunjukkan cara mengonfigurasi hal ini dalam ekspresi peringkat dan klausa sort:

kvpairs: type:3=2:10=1
Ranking expression: tag_match(type, type_arr, 10, sum,false,true) 
sort clause: tag_match("type", type_arr, 10, "sum","false","true")

5

Contoh 3: Beberapa tag dengan tipe sama namun skor berbeda

6Seperti yang ditunjukkan pada gambar, konten yang disorot merah memiliki tag yang sama, tetapi setiap tag memiliki skor berbeda. Contoh berikut menunjukkan cara mengonfigurasi hal ini dalam ekspresi peringkat dan klausa sort:

kvpairs: type:3=2:9=2
Ranking expression: tag_match(type, type_arr, sum, sum,false,true) 
sort clause: tag_match("type", type_arr, "sum", "sum","false","true")

7

Catatan

Contoh Java SDK: Java SDK Search Demo