全部產品
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系統生效。

安裝Package 依賴

Package 依賴地址:https://www.nuget.org/packages

dotnet add package AlibabaCloud.TeaUtil --version  0.1.5
dotnet add package AlibabaCloud.OpenSearchUtil --version 1.0.2
dotnet add package Aliyun.Credentials --version  1.2.1
dotnet add package Tea --version 0.4.0

範例程式碼

以下是C# SDK 的範例程式碼:

using System;
using System.Collections.Generic;
using AlibabaCloud.TeaUtil.Models;
using Tea;

namespace ConsoleApp2
{
    internal class Program
    {
        public static Dictionary<string, object> behaviorBulk(Client opensearchClient, string appName,
            string collectionName, List<object> docContent, Dictionary<string, string> header, RuntimeOptions runTime)
        {
            string pathName = "/v3/openapi/app-groups/" + appName + "/data-collections/" + collectionName +
                              "/data-collection-type/BEHAVIOR/actions/bulk";
            try
            {
                return opensearchClient._request("POST", pathName, null, header, docContent, runTime);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }


        private static void Main(string[] args)
        {
            var runtime = new RuntimeOptions
            {
                ConnectTimeout = 5000,
                ReadTimeout = 10000,
                MaxAttempts = 0,
                Autoretry = false,
                IgnoreSSL = false,
                MaxIdleConns = 50
            };

            var config = new Config
            {
                // 配置統一的請求入口, 此資訊可從業務控制台擷取.
                Endpoint = "opensearch-cn-hangzhou.aliyuncs.com",

                // 支援 protocol 配置 HTTPS/HTTP
                Protocol = "HTTPS",

                /* 使用者識別資訊
                從環境變數讀取配置的AccessKey ID和AccessKey Secret,
                運行程式碼範例前必須先配置環境變數,參考文檔上面“配置環境變數”步驟 */
                AccessKeyId =  System.Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                AccessKeySecret = System.Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),

                // 支援 type 配置 sts/access_key 鑒權. 其中 type 預設為 access_key 鑒權. 使用 sts 可配置 RAM-STS 鑒權.
                // 備選參數為:sts 或者 access_key
                Type = "access_key",

                // 如果使用 RAM-STS 鑒權, 請配置 security_token, 可使用阿里雲 AssumeRole 擷取 相關 STS 鑒權結構.
                SecurityToken = "",
            };

            // 建立 opensearch client 執行個體
            var openSearch = new Client(config);

            // 要搜尋的appName.
            var appName = "appName";

            // 自訂HttpHeaders .
            var header = new Dictionary<string, string>();

            // ---------------  行為日誌 ---------------
            

            // item_id 資訊為搜尋結果返回的主鍵資訊. 特定為主鍵 id.
            string item_id = "358713";

            // ops_request_misc 為搜尋請求返回的 ops_request_misc 資訊.
            string ops_request_misc =
                "%7B%22request%5Fid%22%3A%22161777635816780357273903%22%2C%22scm%22%3A%2220140713.130149759..%22%7D";

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

            // request_id 為搜尋請求返回的 request_id 資訊.
            string request_id = "161777635816780357273903";

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

            // 用於唯一標識終端應用上的使用者的ID。
            // *一般為登入使用者ID。
            // *對於PC端,如果是未登入使用者,也可以設定為cookieid
            string user_id = "a7a0d37c824b659f36a5b9e3b819fcdd";

            List<object> behaviorDocs = new List<object>();
            Dictionary<string, object> behaviorDoc = new Dictionary<string, object>();

            Dictionary<string, object> behaviorDocFields = new Dictionary<string, object>()
            {
                {"item_id", item_id},
                {"sdk_type", "opensearch_sdk"},
                {"sdk_version", "<sdk_version>"}, // 當前使用的 opensearch sdk 的版本號碼.
                {"trace_id", "ALIBABA"}, // 用於區分調用了哪個服務商的服務
                {"trace_info", ops_request_misc},
                {"bhv_type", bhv_type},
                {"item_type", "item"},
                {"rn", request_id},
                {"biz_id", "<biz_id>"}, // 手機或終端應用用於區分業務的一個數值ID,該欄位可用來和OpenSearch上的應用或和AIRec上的執行個體做關聯
                {"reach_time", reach_time},
                {"user_id", user_id}
            };

            behaviorDoc.Add("cmd", "ADD");
            behaviorDoc.Add("fields", behaviorDocFields);

            behaviorDocs.Add(behaviorDoc);
            try
            {
                behaviorBulk(openSearch, appName, appName, behaviorDocs, header, runtime);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }
    }
}
說明

參考:推送採集資料