Topik ini menyediakan contoh kode Go untuk mendorong data perilaku ke aplikasi OpenSearch Edisi Algoritma Industri. Data perilaku—seperti klik, pembelian, favorit, dan tindakan pengguna serupa lainnya—memberikan masukan bagi mesin rekomendasi dan meningkatkan relevansi hasil seiring waktu.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Aplikasi OpenSearch Edisi Algoritma Industri
Pasangan AccessKey. Gunakan pasangan AccessKey milik Pengguna Resource Access Management (RAM), bukan pasangan AccessKey Akun Alibaba Cloud Anda. Untuk detailnya, lihat Create a RAM user dan Create an AccessKey pair.
Izin yang diperlukan telah diberikan kepada role
AliyunServiceRoleForOpenSearch. Untuk detailnya, lihat AliyunServiceRoleForOpenSearch dan Access authorization rules.
Konfigurasikan variabel lingkungan
Tetapkan pasangan AccessKey Anda sebagai variabel lingkungan agar kode contoh dapat membacanya saat waktu proses. Jangan pernah menyematkan kredensial secara langsung di file sumber.
Linux dan macOS: Jalankan perintah berikut. Ganti
<access_key_id>dan<access_key_secret>dengan ID AccessKey dan Rahasia AccessKey Pengguna RAM Anda.export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id> export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>Windows: Buat file variabel lingkungan, tambahkan
ALIBABA_CLOUD_ACCESS_KEY_IDdanALIBABA_CLOUD_ACCESS_KEY_SECRET, lalu atur nilainya sesuai dengan ID AccessKey dan Rahasia AccessKey Anda. Mulai ulang Windows agar variabel tersebut berlaku.
Bidang perilaku
Setiap permintaan dorong membungkus satu atau beberapa dokumen perilaku. Setiap dokumen berisi objek fields yang berisi data perilaku.
Bidang wajib
Bidang-bidang berikut wajib diisi untuk semua jenis perilaku.
Field | Description |
| Kunci primary dari item yang dikembalikan dalam hasil pencarian. |
| ID unik pengguna. Untuk pengguna yang login, gunakan ID pengguna tersebut. Untuk pengguna anonim pada client PC, gunakan ID cookie. |
| Jenis perilaku. |
| Waktu saat server menerima data, dalam bentuk stempel waktu UNIX yang akurat hingga detik. |
| Nilai |
| ID permintaan yang dikembalikan dalam hasil pencarian. |
| ID numerik yang membedakan jalur bisnis pada client mobile atau aplikasi. Mengaitkan data dengan aplikasi OpenSearch dan instans Artificial Intelligence Recommendation (AIRec). |
| Atur ke |
| Nomor versi OpenSearch SDK untuk Go. |
| Atur ke |
| Atur ke |
Bidang kondisional
Bidang-bidang berikut hanya wajib diisi jika nilai bhv_type adalah like, comment, atau buy.
Field | Description |
| Deskripsi perilaku. Format: |
| Informasi numerik mengenai perilaku, seperti durasi tinggal atau jumlah item yang dibeli. |
Jenis perilaku {#behavior-types}
Value | Description | Requires conditional fields |
| Pengguna mengklik atau melihat suatu item. | No |
| Pengguna menambahkan item ke keranjang belanja. | No |
| Pengguna menambahkan item ke favorit. | No |
| Pengguna menyukai suatu item. | Yes |
| Pengguna memposting komentar pada suatu item. | Yes |
| Pengguna membeli suatu item. | Yes |
Kode contoh
Kode contoh ini membuat client SDK, menyusun dokumen perilaku, dan mengirimkannya ke titik akhir bulk push OpenSearch menggunakan permintaan POST.
// File ini dihasilkan secara otomatis, jangan diedit. Terima kasih.
package main
import (
"fmt"
util "github.com/alibabacloud-go/tea-utils/service"
"github.com/alibabacloud-go/tea/tea"
opensearch "main/client"
)
func main() {
// Konfigurasikan client dengan titik akhir dan kredensial Anda dari variabel lingkungan.
// endpoint: titik akhir API OpenSearch untuk wilayah Anda.
config := &opensearch.Config{
Endpoint: tea.String("<Endpoint>"),
// Baca kredensial dari variabel lingkungan yang ditetapkan di bagian "Konfigurasikan variabel lingkungan".
AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
}
client, _clientErr := opensearch.NewClient(config)
if _clientErr != nil {
fmt.Println(_clientErr)
return
}
// item_id: kunci primary dari item yang dikembalikan dalam hasil pencarian.
itemId := "<item_id>"
// trace_info: nilai ops_request_misc yang dikembalikan dalam hasil pencarian.
opsRequestMisc := "<ops_request_misc>"
// bhv_type: jenis perilaku. Nilai valid: cart, collect, like, comment, buy, click.
bhvType := "<bhv_type>"
// rn: ID permintaan yang dikembalikan dalam hasil pencarian.
requestId := "<request_id>"
// reach_time: stempel waktu UNIX (dalam detik) saat server menerima data.
reachTime := "<reach_time>"
// user_id: ID unik pengguna.
// Untuk pengguna yang login, gunakan ID pengguna tersebut. Untuk pengguna anonim PC, gunakan ID cookie.
user_id := "<user_id>"
behavior_fields := map[string]interface{}{
"item_id": itemId,
"sdk_type": "opensearch_sdk",
"sdk_version": "<sdk_version>", // Nomor versi OpenSearch SDK untuk Go.
"trace_id": "ALIBABA", // Identifier penyedia layanan.
"trace_info": opsRequestMisc,
"bhv_type": bhvType,
"item_type": "item",
"rn": requestId,
"biz_id": "<biz_id>", // ID bisnis numerik untuk client mobile atau aplikasi.
"reach_time": reachTime,
"user_id": user_id,
}
// Untuk perilaku like, comment, dan buy, sertakan bhv_detail dan bhv_value.
bhv_actions := []string{"like", "comment", "buy"}
if IsContain(bhv_actions, bhvType) {
behavior_fields["bhv_detail"] = "<bhv_detail>" // Format: key=value{,key=value}
behavior_fields["bhv_value"] = "<bhv_value>" // Informasi perilaku numerik, misalnya jumlah pembelian.
}
behavior_document := map[string]interface{}{
"cmd": "ADD",
"fields": behavior_fields,
}
requestBody := []interface{}{behavior_document}
// Tentukan parameter yang digunakan untuk mengonfigurasi permintaan dan kolam koneksi.
runtime := &util.RuntimeOptions{
ConnectTimeout: tea.Int(5000),
ReadTimeout: tea.Int(10000),
Autoretry: tea.Bool(false),
IgnoreSSL: tea.Bool(false),
MaxIdleConns: tea.Int(50),
}
// appName: nama aplikasi OpenSearch (bukan nama versinya).
// dataCollectionName: nama koleksi data dalam aplikasi.
appName := "<appName>"
dataCollectionName := "<dataCollectionName>"
// dataCollectionType: atur ke BEHAVIOR untuk data perilaku.
dataCollectionType := "BEHAVIOR"
_response, _request_err := client.Request(
tea.String("POST"),
tea.String("/v3/openapi/app-groups/"+appName+"/data-collections/"+dataCollectionName+"/data-collection-type/"+dataCollectionType+"/actions/bulk"),
nil,
nil,
requestBody,
runtime)
if _request_err != nil {
fmt.Println(_request_err)
return
}
fmt.Println(_response)
}
func IsContain(items []string, item string) bool {
for _, eachItem := range items {
if eachItem == item {
return true
}
}
return false
}