全部产品
Search
文档中心

:tag_match

更新时间:Jun 26, 2025

Fungsi yang dapat digunakan sebagai fungsi fitur dan fungsi fungsionalitas

Beberapa fungsi dapat digunakan baik sebagai fungsi fitur maupun fungsionalitas. Fungsi ini dapat diterapkan dalam klausa filter, klausa pengurutan, dan ekspresi pengurutan.

Bidang yang direferensikan dalam parameter fungsi harus dikonfigurasi sebagai bidang indeks atau atribut sesuai dengan deskripsi setiap fungsi.

tag_match: mencocokkan klausa kueri dengan dokumen berdasarkan tag dan memberi skor dokumen dengan menghitung bobot tag yang cocok

1. Ikhtisar

Fungsi tag_match cocok untuk sebagian besar skenario di mana Anda perlu menyediakan pencarian personalisasi dengan mencocokkan klausa kueri dengan dokumen. Misalnya, toko-toko favorit pengguna ditampilkan terlebih dahulu, atau berita terkait olahraga dan hiburan yang mungkin disukai pengguna direkomendasikan. Fungsi tag_match menambahkan array pasangan kunci-nilai ke dokumen. Anda dapat menggunakan klausa kvpairs untuk mendefinisikan pasangan kunci-nilai dalam klausa kueri. Fungsi tag_match mencocokkan kunci dalam dokumen dengan kunci dalam klausa kueri, menghitung skor untuk setiap pasangan kunci yang cocok, lalu menghitung skor akhir setiap dokumen. Skor akhir dapat digunakan untuk mengurutkan dokumen berdasarkan bobot atau memfilter dokumen.

Gambar berikut menunjukkan cara fungsi tag_match menghitung skor akhir.image

2. Sintaksis

Sintaksis Reguler:

tag_match(query_key, doc_field, kv_op, merge_op)

Sintaksis Lanjutan:

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

3. Parameter

  • query_key: Mendefinisikan pasangan kunci-nilai dalam klausa kueri. Anda harus menentukan parameter ini menggunakan klausa kvpairs. Dalam setiap pasangan kunci-nilai, kunci dan nilai dipisahkan oleh tanda sama dengan (=). Beberapa pasangan kunci-nilai dipisahkan oleh titik dua (:). Contoh: kvpairs=query_tags:10=0.67:960=0.85:1=48. Kuncinya adalah 10, 960, dan 1. Nilai dari ketiga kunci tersebut adalah 0.67, 0.85, dan 48. Anda juga dapat menentukan hanya daftar kunci. Contoh: kvpairs=cats:10:960:1.

  • doc_field: Mendefinisikan nama bidang dalam dokumen yang menyimpan pasangan kunci-nilai. Bidang tersebut harus bertipe INT_ARRAY, FLOAT_ARRAY, atau DOUBLE_ARRAY. Jika bidang bertipe FLOAT_ARRAY, kunci akan dikonversi menjadi bilangan bulat 64-bit untuk pencocokan. Kunci menempati posisi ganjil dalam array, dan nilai menempati posisi genap dalam array. Contoh array: [key0 value0 key1 value1…].

  • kv_op: Operasi yang dilakukan pada nilai jika kunci dalam klausa kueri cocok dengan kunci dalam dokumen. Anda dapat menyetel parameter ini ke max, min, sum, avg, mul, query_value, doc_value, atau angka konstan. Fungsi query_value mengembalikan nilai kunci yang cocok dalam klausa kueri. Fungsi doc_value mengembalikan nilai kunci yang cocok dalam dokumen.

  • merge_op: Jika beberapa kunci dalam klausa kueri cocok dengan beberapa kunci dalam dokumen, operasi yang ditentukan oleh operasi kv_op menghitung skor untuk setiap pasangan kunci yang cocok. Kemudian, Anda dapat menyetel parameter merge_op untuk melakukan operasi pada skor. Anda dapat menyetel parameter merge_op ke max, min, sum, avg, atau first_match. Operasi first_match hanya mengembalikan skor yang dihitung untuk pasangan kunci pertama yang cocok.

  • has_default: Menentukan apakah akan menggunakan skor awal. Nilai defaultnya adalah false. Jika parameter ini disetel ke true, nilai pertama dari parameter doc_field adalah skor awal. Contoh parameter doc_field: [init_score k0 v0 k1 v1…]. Skor awal dapat dianggap sebagai skor dasar.

  • doc_kv: Menentukan apakah nilai parameter doc_field terdiri dari pasangan kunci-nilai. Nilai defaultnya adalah true. Jika parameter ini disetel ke false, nilai parameter doc_field terdiri dari hanya kunci.

  • max_kv_count: Jumlah maksimum pasangan kunci-nilai yang dapat diteruskan dari klausa kueri. Nilai defaultnya adalah 50. Anda dapat mengubah nilainya menjadi angka yang lebih kecil dari atau sama dengan 5120.

4. Nilai Kembali

Nilai kembali bertipe DOUBLE dan menunjukkan skor akhir dokumen. Jika Anda menyetel parameter has_default ke false atau tidak menyetel parameter ini, 0 dikembalikan. Jika Anda ingin mengembalikan bilangan bulat 64-bit, Anda harus menggunakan fungsi int_tag_match. Kecuali untuk nilai kembali, fungsi int_tag_match dapat digunakan dengan cara yang sama seperti fungsi tag_match. Fungsi int_tag_match tidak dapat digunakan dalam ekspresi pengurutan.

5. Skenario

Skenario 1: Tag yang berbeda ditambahkan ke postingan di forum besar dan komprehensif, seperti lucu, olahraga, berita, musik, dan sains. Saat Anda mendorong dokumen ke OpenSearch, Anda dapat menetapkan ID untuk setiap tag. Misalnya, ID tag lucu, olahraga, berita, dan musik adalah 1, 5, 3, dan 6. Tag-tag ini disimpan di bidang tag. Anda juga dapat memperoleh bobot setiap tag untuk setiap postingan setelah pra-pemrosesan. Misalnya, untuk sebuah postingan, bobot tag lucu, olahraga, dan berita adalah 0.5, 0.5, dan 0.1. Dalam hal ini, nilai bidang tag adalah [1 0.5 5 0.5 3 0.1]. Setelah analisis jangka panjang terhadap pencarian yang dilakukan oleh anggota forum, Anda dapat mengetahui tag postingan favorit setiap anggota.

Misalnya, anggota nba_fans tertarik pada konten olahraga dan lucu, dan bobot tag olahraga dan lucu untuk anggota ini adalah 0.6 dan 0.3. Lalu, Anda dapat menggunakan klausa kvpairs untuk mendefinisikan pasangan tag-bobot sebagai pasangan kunci-nilai dan meneruskan pasangan kunci-nilai ke klausa kueri saat anggota ini mencari postingan. Jika nama bidang yang didefinisikan dalam klausa kvpairs adalah user_tag, nilai bidang user_tag untuk anggota ini adalah 5=0.6:1=0.3. Dengan cara ini, jika Anda menggunakan fungsi tag_match(user_tag, tag, mul, sum) dalam ekspresi pengurutan halus, layanan pencarian Anda dapat menghitung bobot postingan yang diminati anggota tersebut dan mencantumkan postingan dengan bobot tinggi terlebih dahulu.

Misalnya, saat anggota ini mencari postingan sebelumnya, baik tag lucu maupun olahraga dapat dicocokkan. Anda dapat menyetel parameter kv_op ke mul untuk mendapatkan produk dari nilai setiap kunci dalam klausa kueri dan nilai setiap kunci yang cocok dalam dokumen. Dalam contoh ini, skor tag olahraga adalah 0.5 × 0.6 = 0.3. Skor tag lucu adalah 0.5 × 0.3 = 0.15. Anda dapat menyetel parameter merge_op untuk menghitung jumlah skor dari dua tag menggunakan rumus berikut: 0.3 + 0.15 = 0.45. Lalu, jumlah tersebut ditambahkan ke skor pengurutan akhir. Dengan cara ini, Anda dapat mengurutkan postingan yang diminati anggota tersebut dengan menghitung bobot.

Skenario 2:

Barang dapat memiliki beberapa tag atribut. Misalnya, 1 menunjukkan muda (usia), 2 menunjukkan paruh baya (usia), 3 menunjukkan segar (gaya), 4 menunjukkan mode (gaya), 5 menunjukkan wanita (jenis kelamin), dan 6 menunjukkan pria (jenis kelamin).

Anda mungkin hanya ingin mencocokkan tag tetapi tidak ingin menghitung bobot tag untuk pengurutan. Dalam hal ini, Anda dapat menggunakan bidang options untuk menyimpan tag. Jika pakaian memiliki tag muda, mode, dan wanita, nilai bidang options adalah [1 4 5]. Nilai ini hanya terdiri dari kunci. Pengguna juga memiliki tag atribut yang mirip dengan tag atribut barang. Misalnya, seorang pengguna wanita muda pernah membeli pakaian bergaya segar dalam transaksi historis. Dalam hal ini, bidang user_options=1:3:5 dapat ditambahkan ke klausa kueri saat pengguna ini mencari pakaian. Bidang yang didefinisikan oleh klausa kvpairs hanya terdiri dari kunci.

Jika Anda ingin mengurutkan barang yang memiliki tag favorit pengguna dengan menghitung bobot, Anda dapat menggunakan fungsi tag_match(user_options, options, 10, sum, false, false) dalam ekspresi pengurutan. Parameter user_options menyimpan tag dalam klausa kueri, dan parameter options menyimpan tag dalam dokumen. Nilai 10 dari parameter kv_op menunjukkan bahwa 10 adalah skor untuk setiap pasangan kunci yang cocok. Nilai false dari parameter has_default menunjukkan bahwa skor awal tidak digunakan. Nilai false dari parameter doc_kv menunjukkan bahwa nilai parameter doc_field hanya terdiri dari kunci.

Saat pengguna wanita muda sebelumnya mencari pakaian sebelumnya, baik tag wanita maupun muda dapat dicocokkan, dan skor kedua tag tersebut adalah 10. Setelah operasi sum yang ditentukan oleh parameter merge_op dilakukan pada kedua skor, skor akhir pakaian tersebut adalah 20. Dengan cara ini, Anda dapat mengurutkan dokumen berdasarkan bobot tanpa informasi bobot tentang tag.

Catatan penggunaan

  • Bidang yang direferensikan dalam parameter fungsi harus dikonfigurasi sebagai bidang atribut.

  • Jika fungsi tag_match digunakan dalam klausa filter atau klausa pengurutan, parameter query_key, kv_op, merge_op, has_default, dan doc_kv harus diapit tanda kutip ganda ("). Contoh: sort=-tag_match("user_options", options, "mul", "sum", "false", "true", 100).

  • Fungsi tag_match mencocokkan kunci bertipe integer. Oleh karena itu, kunci dalam klausa kueri dan dalam dokumen harus dikonversi menjadi integer. Jika kunci adalah bilangan floating-point, fungsi tag_match memaksa konversi ke integer.

Contoh

Dokumen Anda memiliki 10 tag berikut:

1: keuangan dan ekonomi
2: teknologi
3: olahraga
4: hiburan
5: mode
6: pendidikan
7: perjalanan
8: game
9: sains
10: medis

Contoh 1: Mengurutkan Judul dengan Kata Kunci yang Sama tetapi Tag Berbeda

imageSaat Anda mencari "chiji", dua dokumen ditemukan, seperti yang ditunjukkan pada gambar di atas. Tag dari kedua dokumen tersebut berbeda. ID tag dokumen pertama adalah 1 yang menunjukkan keuangan dan ekonomi. ID tag dokumen kedua adalah 8 yang menunjukkan game. Jika Anda ingin dokumen dengan tag game terdaftar terlebih dahulu, Anda dapat menggunakan fungsi tag_match. Contoh berikut menunjukkan bagaimana fungsi tag_match digunakan dalam ekspresi pengurutan dan klausa pengurutan:

klausa kvpairs: type:8
Ekspresi pengurutan: tag_match(type, type_arr, 10, max,false,false) 
Klausa pengurutan: tag_match("type", type_arr, 10, "max","false","false")

Gambar berikut menunjukkan hasil pencarian yang diperoleh dengan menggunakan ekspresi pengurutan.imageGambar berikut menunjukkan hasil pencarian yang diperoleh dengan menggunakan klausa pengurutan.image

Contoh 2: Mengurutkan Judul dengan Menghitung Skor Akhir Berdasarkan Bobot Beberapa Tag untuk Rekomendasi Personalisasi

imageJika tag tingkat pertama sama, seperti yang ditunjukkan pada gambar di atas, Anda perlu menghitung skor tag tingkat kedua. Contoh berikut menunjukkan bagaimana fungsi tag_match digunakan dalam ekspresi pengurutan dan klausa pengurutan:

klausa kvpairs: type:3=2:10=1
Ekspresi pengurutan: tag_match(type, type_arr, 10, sum,false,true) 
Klausa pengurutan: tag_match("type", type_arr, 10, "sum","false","true")

image

Contoh 3: Mengurutkan Judul dengan Tag yang Sama tetapi Bobot Berbeda

imageDokumen yang dibingkai merah pada gambar di atas memiliki tag yang sama tetapi tag tersebut memiliki bobot yang berbeda. Contoh berikut menunjukkan bagaimana fungsi tag_match digunakan dalam ekspresi pengurutan dan klausa pengurutan:

klausa kvpairs: type:3=2:9=2
Ekspresi pengurutan: tag_match(type, type_arr, sum, sum,false,true) 
Klausa pengurutan: tag_match("type", type_arr, "sum", "sum","false","true")

image

Catatan

Contoh kode menggunakan SDK untuk Java: Demo pencarian