すべてのプロダクト
Search
ドキュメントセンター

OpenSearch:行動データプッシュのデモ

最終更新日:Aug 22, 2026

このトピックでは、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 オブジェクトがあります。

必須フィールド

次のフィールドは、すべての行動タイプで必須です。

フィールド

説明

item_id

検索結果で返されるアイテムのプライマリキー。

user_id

ユーザーの一意の ID。ログイン済みユーザーの場合はユーザー ID を使用します。PC クライアントの匿名ユーザーの場合は cookie ID を使用します。

bhv_type

行動タイプ。

reach_time

サーバーがデータを受信した時刻。秒精度の UNIX タイムスタンプ。

trace_info

検索結果で返される ops_request_misc の値。

rn

検索結果で返されるリクエスト ID。

biz_id

モバイルまたはアプリケーション クライアントで事業ラインを区別する数値 ID。データを OpenSearch アプリケーションおよび Artificial Intelligence Recommendation (AIRec) インスタンスに関連付けます。

sdk_type

opensearch_sdk を設定します。

sdk_version

Go 用 OpenSearch SDK のバージョン番号。

trace_id

ALIBABA を設定します。

item_type

item を設定します。

条件付きフィールド

次のフィールドは、bhv_type が like、comment、または buy の場合にのみ必須です。

フィールド

説明

bhv_detail

行動の説明。形式:key=value{,key=value}。

bhv_value

滞在時間や購入点数など、行動に関する数値情報。

行動タイプ {#behavior-types}

値

説明

条件付きフィールドが必要

click

ユーザーがアイテムをクリックまたは表示します。

いいえ

cart

ユーザーがアイテムをショッピングカートに追加します。

いいえ

collect

ユーザーがアイテムをお気に入りに追加します。

いいえ

like

ユーザーがアイテムに「いいね」します。

はい

comment

ユーザーがアイテムにコメントを投稿します。

はい

buy

ユーザーがアイテムを購入します。

はい

サンプルコード

サンプルコードでは、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
}