全部產品
Search
文件中心

OpenSearch:行為資料推送Demo

更新時間:Jul 13, 2024

配置環境變數

配置環境變數ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET

重要
  • 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運,具體操作,請參見建立RAM使用者

  • 建立AccessKey ID和AccessKey Secret,請參考建立AccessKey

  • 如果您使用的是RAM使用者的AccessKey,請確保主帳號已授權AliyunServiceRoleForOpenSearch服務關聯角色,請參考OpenSearch-行業演算法版服務關聯角色,相關文檔參考訪問鑒權規則

  • 請不要將AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。

  • LinuxmacOS系統配置方法:

    執行以下命令,其中, <access_key_id>需替換為您RAM使用者的AccessKey ID,<access_key_secret>替換為您RAM使用者的AccessKey Secret。

    export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id> 
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>
  • Windows系統配置方法

    1. 建立環境變數檔案,添加環境變數ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET,並寫入已準備好的AccessKey ID和AccessKey Secret。

    2. 重啟Windows系統生效。

程式碼範例

// This file is auto-generated, don't edit it. Thanks.
package main

import (
  "fmt"
  util "github.com/alibabacloud-go/tea-utils/service"
  "github.com/alibabacloud-go/tea/tea"
  opensearch "main/client"
)

func main() {
  // 建立請求用用戶端執行個體
  // Endpoint 為 要訪問服務的地區網域名稱.
  // AccessKeyId 及AccessKeySecret 用於構造鑒權資訊.
  config := &opensearch.Config{
      Endpoint:        tea.String("<Endpoint>"),
    
      // 使用者識別資訊
      // 從環境變數讀取配置的AccessKey ID和AccessKey Secret,
      // 運行程式碼範例前必須先配置環境變數,參考文檔上面“配置環境變數”步驟
      // 替換對應的access key id
      AccessKeyId:     tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
      AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
  }

  // New  一個client, 用以發送請求.
    client, _clientErr := opensearch.NewClient(config)

  // 如果 NewClient 過程中出現異常. 則 返回 _client_err 且輸出 錯誤資訊.
  if _clientErr != nil {
      fmt.Println(_clientErr)
      return
  }


  // item_id  資訊 為 搜尋結果返回的主鍵資訊. 特定 為主鍵 id.
  itemId := "<item_id>"

  // ops_request_misc 為搜尋請求返回的 ops_request_misc 資訊.
  opsRequestMisc :="<ops_request_misc>"


  // bhv_type 為 行為事件的特徵資訊, 備選資訊如下為類別:
  //      cart(加購物車)
  //      collect(收藏)
  //      like(點贊)
  //      comment(評論)
  //      buy(購買)
  //      click(點擊/查看)
  bhvType := "<bhv_type>"

  // requestId 為搜尋請求返回的 request_id 資訊.
  requestId :="<request_id>"

  // 該資料到達服務端的時間,格式:時間戳記,單位:秒
  reachTime :="<reach_time>"


  // 用於唯一標識終端應用上的使用者的ID。
  //*一般為登入使用者ID。
  //*對於PC端,如果是未登入使用者,也可以設定為cookieid
  user_id:="<user_id>"
  behavior_fields :=map[string]interface{}{
      "item_id": itemId,
      "sdk_type": "opensearch_sdk",
      "sdk_version": "<sdk_version>",  // 當前使用的 opensearch sdk 的版本號碼.
      "trace_id": "ALIBABA",  // 用於區分調用了哪個服務商的服務
      "trace_info": opsRequestMisc,
      "bhv_type": bhvType,
      "item_type": "item",
      "rn": requestId,
      "biz_id":"<biz_id>",  // 手機或終端應用用於區分業務的一個數值ID,該欄位可用來和OpenSearch上的應用或和AIRec上的執行個體做關聯
      "reach_time": reachTime,
      "user_id": user_id,

  }

  bhv_actions := []string{"like", "comment", "buy"}
  if IsContain(bhv_actions,bhvType){  // 當定位類型包含在 bhv_actions 範圍內. 則需要提供更多行為資訊.

      // 該行為的一些描述資訊。格式:key=value{,key=value}
      behavior_fields["bhv_detail"] ="<bhv_detail>"

      // 行為數量,例如停留時間長度,購買件數等
      behavior_fields["bhv_value"] ="<bhv_value>"
  }
  behavior_document := map[string]interface{}{
      "cmd": "ADD",
      "fields": behavior_fields,
  }

  // 組裝推送文檔 數組結構. 其中包含單條文檔動作.
  requestBody := []interface{}{behavior_document}

  // 請求發送的配置參數. 用以請求配置及串連池配置.
  runtime := &util.RuntimeOptions{
      ConnectTimeout: tea.Int(5000),
      ReadTimeout:    tea.Int(10000),
      Autoretry:      tea.Bool(false),
      IgnoreSSL:      tea.Bool(false),
      MaxIdleConns:   tea.Int(50),
  }

    // 推送介面需要提供 推送 app 和資料擷取名稱,
    // appName 是 app 名稱. 不可使用版本推送資料
    appName := "<appName>"
    dataCollectionName := "<dataCollectionName>"

    // dataCollectionType 為 'BEHAVIOR', 此為預設值.
    dataCollectionType := "BEHAVIOR"

    // 發送請求的方法調用.
  _reponse, _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)

  // 如果 發送請求 過程中出現異常. 則 返回 _request_err 且輸出 錯誤資訊.
  if _request_err != nil {
      fmt.Println(_request_err)
      return
  }

  // 輸出正常返回的 _reponse 內容.
  fmt.Println(_reponse)
}

func IsContain(items []string, item string) bool {
   for _, eachItem := range items {
       if eachItem == item {
           return true
       }
   }
   return false
}