All Products
Search
Document Center

OpenSearch:Demo dorong data perilaku

Last Updated:Aug 22, 2026

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:

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_ID dan ALIBABA_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

item_id

Kunci primary dari item yang dikembalikan dalam hasil pencarian.

user_id

ID unik pengguna. Untuk pengguna yang login, gunakan ID pengguna tersebut. Untuk pengguna anonim pada client PC, gunakan ID cookie.

bhv_type

Jenis perilaku.

reach_time

Waktu saat server menerima data, dalam bentuk stempel waktu UNIX yang akurat hingga detik.

trace_info

Nilai ops_request_misc yang dikembalikan dalam hasil pencarian.

rn

ID permintaan yang dikembalikan dalam hasil pencarian.

biz_id

ID numerik yang membedakan jalur bisnis pada client mobile atau aplikasi. Mengaitkan data dengan aplikasi OpenSearch dan instans Artificial Intelligence Recommendation (AIRec).

sdk_type

Atur ke opensearch_sdk.

sdk_version

Nomor versi OpenSearch SDK untuk Go.

trace_id

Atur ke ALIBABA.

item_type

Atur ke item.

Bidang kondisional

Bidang-bidang berikut hanya wajib diisi jika nilai bhv_type adalah like, comment, atau buy.

Field

Description

bhv_detail

Deskripsi perilaku. Format: key=value{,key=value}.

bhv_value

Informasi numerik mengenai perilaku, seperti durasi tinggal atau jumlah item yang dibeli.

Jenis perilaku {#behavior-types}

Value

Description

Requires conditional fields

click

Pengguna mengklik atau melihat suatu item.

No

cart

Pengguna menambahkan item ke keranjang belanja.

No

collect

Pengguna menambahkan item ke favorit.

No

like

Pengguna menyukai suatu item.

Yes

comment

Pengguna memposting komentar pada suatu item.

Yes

buy

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
}