このトピックでは、OpenSearch Industry Algorithm Edition のアプリケーションに行動データをプッシュするための Go のサンプルコードを提供します。行動データ (クリック、購入、お気に入りなどのユーザーアクション) はレコメンデーションエンジンに取り込まれ、時間の経過とともに結果の関連性が向上します。
前提条件
開始する前に、以下をご用意ください。
OpenSearch Industry Algorithm Edition のアプリケーション
AccessKey ペア。Alibaba Cloud アカウントの AccessKey ペアではなく、RAM ユーザーの AccessKey ペアを使用してください。詳細については、「Create a RAM user」および「Create an AccessKey pair」をご参照ください。
AliyunServiceRoleForOpenSearchロールに付与されている必要な権限。詳細については、「AliyunServiceRoleForOpenSearch」および「Access authorization rules」をご参照ください。
環境変数の設定
サンプルコードが実行時に読み取れるように、AccessKey ペアを環境変数として設定します。認証情報をソースファイルにハードコードしないでください。
Linux および macOS:次のコマンドを実行します。
<access_key_id>と<access_key_secret>を、RAM ユーザーの AccessKey ID と AccessKey secret に置き換えてください。export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id> export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>Windows:環境変数ファイルを作成し、
ALIBABA_CLOUD_ACCESS_KEY_IDとALIBABA_CLOUD_ACCESS_KEY_SECRETを追加して、それぞれの値を AccessKey ID と AccessKey secret に設定してください。変数を有効にするには Windows を再起動してください。
行動フィールド
各プッシュリクエストは、1 つ以上の行動ドキュメントを含みます。各ドキュメントには、行動データを含む fields オブジェクトがあります。
必須フィールド
次のフィールドは、すべての行動タイプで必須です。
フィールド | 説明 |
| 検索結果で返されるアイテムのプライマリキー。 |
| ユーザーの一意の ID。ログイン済みユーザーの場合はユーザー ID を使用します。PC クライアントの匿名ユーザーの場合は cookie ID を使用します。 |
| 行動タイプ。 |
| サーバーがデータを受信した時刻。秒精度の UNIX タイムスタンプ。 |
| 検索結果で返される |
| 検索結果で返されるリクエスト ID。 |
| モバイルまたはアプリケーション クライアントで事業ラインを区別する数値 ID。データを OpenSearch アプリケーションおよび Artificial Intelligence Recommendation (AIRec) インスタンスに関連付けます。 |
|
|
| Go 用 OpenSearch SDK のバージョン番号。 |
|
|
|
|
条件付きフィールド
次のフィールドは、bhv_type が like、comment、または buy の場合にのみ必須です。
フィールド | 説明 |
| 行動の説明。形式: |
| 滞在時間や購入点数など、行動に関する数値情報。 |
行動タイプ {#behavior-types}
値 | 説明 | 条件付きフィールドが必要 |
| ユーザーがアイテムをクリックまたは表示します。 | いいえ |
| ユーザーがアイテムをショッピングカートに追加します。 | いいえ |
| ユーザーがアイテムをお気に入りに追加します。 | いいえ |
| ユーザーがアイテムに「いいね」します。 | はい |
| ユーザーがアイテムにコメントを投稿します。 | はい |
| ユーザーがアイテムを購入します。 | はい |
サンプルコード
サンプルコードでは、SDK クライアントを作成し、行動ドキュメントを構築して、POST リクエストで OpenSearch のバルクプッシュエンドポイントに送信します。
// このファイルは自動生成されています。編集しないでください。
package main
import (
"fmt"
"os"
util "github.com/alibabacloud-go/tea-utils/service"
"github.com/alibabacloud-go/tea/tea"
opensearch "main/client"
)
func main() {
// 環境変数から取得したエンドポイントと認証情報を使用してクライアントを設定します。
// endpoint:リージョンの OpenSearch API エンドポイント。
config := &opensearch.Config{
Endpoint: tea.String("<Endpoint>"),
// 「環境変数の設定」セクションで設定した環境変数から認証情報を読み取ります。
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:検索結果で返されるアイテムのプライマリキー。
itemId := "<item_id>"
// trace_info:検索結果で返される ops_request_misc の値。
opsRequestMisc := "<ops_request_misc>"
// bhv_type:行動タイプ。有効な値:cart、collect、like、comment、buy、click。
bhvType := "<bhv_type>"
// rn:検索結果で返されるリクエスト ID。
requestId := "<request_id>"
// reach_time:サーバーがデータを受信した時刻の UNIX タイムスタンプ (秒)。
reachTime := "<reach_time>"
// user_id:ユーザーの一意の ID。
// ログイン済みユーザーの場合はユーザー ID を使用します。PCクライアントの匿名ユーザーの場合は cookie ID を使用します。
user_id := "<user_id>"
behavior_fields := map[string]interface{}{
"item_id": itemId,
"sdk_type": "opensearch_sdk",
"sdk_version": "<sdk_version>", // Go 用 OpenSearch SDK のバージョン番号。
"trace_id": "ALIBABA", // サービスプロバイダー識別子。
"trace_info": opsRequestMisc,
"bhv_type": bhvType,
"item_type": "item",
"rn": requestId,
"biz_id": "<biz_id>", // モバイルまたはアプリケーション クライアントの事業 ID (数値)。
"reach_time": reachTime,
"user_id": user_id,
}
// like、comment、buy の各行動タイプでは、bhv_detail と bhv_value を含めます。
bhv_actions := []string{"like", "comment", "buy"}
if IsContain(bhv_actions, bhvType) {
behavior_fields["bhv_detail"] = "<bhv_detail>" // 形式:key=value{,key=value}
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),
}
// appName:OpenSearch アプリケーションの名前 (バージョン名ではありません)。
// dataCollectionName:アプリケーション内のデータコレクションの名前。
appName := "<appName>"
dataCollectionName := "<dataCollectionName>"
// dataCollectionType:行動データの場合は BEHAVIOR を設定します。
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
}