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

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

最終更新日:Dec 28, 2024

環境変数の設定

ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を設定します。

重要
  • Alibaba Cloud アカウントの AccessKey ペアを使用して、すべての API 操作にアクセスできます。API 操作の呼び出しや日常的な O&M の実行には、Resource Access Management (RAM) ユーザーを使用することをお勧めします。RAM ユーザーの使用方法については、RAM ユーザーの作成 を参照してください。

  • AccessKey ペアの作成方法については、AccessKey ペアの作成 を参照してください。

  • RAM ユーザーの AccessKey ペアを使用する場合は、Alibaba Cloud アカウントを使用して、必要な権限が AliyunServiceRoleForOpenSearch ロールに付与されていることを確認してください。詳細については、AliyunServiceRoleForOpenSearch および アクセス認証ルール を参照してください。

  • プロジェクトコードなど、他の人が簡単にアクセスできる資料に AccessKey ペアを含めないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のリソースが安全でなくなる可能性があります。

  • Linux および macOS

    次のコマンドを実行します。<access_key_id> および <access_key_secret> を、使用する RAM ユーザーの AccessKey ID と AccessKey シークレットに置き換えます。

    export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id> 
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>
  • Windows

    1. 環境変数ファイルを作成し、ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数をファイルに追加し、環境変数を AccessKey ID と AccessKey シークレットに設定します。

    2. AccessKey ペアを有効にするには、Windows を再起動します。

サンプルコード

// このファイルは自動生成されます。編集しないでください。ありがとうございます。
package main

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

func main() {
  // リクエストを送信するためのクライアントインスタンスを作成します。
  // Endpoint:リージョンにおける OpenSearch API のエンドポイント。
  // AccessKeyId および AccessKeySecret:認証に使用される AccessKey ペア。
  config := &opensearch.Config{
      Endpoint:        tea.String("<Endpoint>"),
    
      // AccessKey ペアを指定します。
      // 環境変数から AccessKey ID と AccessKey シークレットを取得します。
      // このコードを実行する前に、環境変数を設定する必要があります。詳細については、このトピックの「環境変数の設定」セクションを参照してください。
      // AccessKey ID を指定します。
      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)

  // システムがクライアントを作成するときに例外が発生した場合、_clientErr は nil ではありません。この場合、エラー情報を表示します。
  if _clientErr != nil {
      fmt.Println(_clientErr)
      return
  }


  // item_id:検索結果で返されるプライマリキーの ID。
  itemId := "<item_id>"

  // ops_request_misc:検索結果で返されるリクエストのその他の情報。
  opsRequestMisc :="<ops_request_misc>"


  // bhv_type:行動データのイベントタイプ。有効な値:
  // cart:商品をショッピングカートに追加します。
  // collect:商品をお気に入りに追加します。
  // like:商品にいいね!をします。
  // comment:商品にコメントを投稿します。
  // buy:商品を購入します。
  // click:商品をクリックまたは表示します。
  bhvType := "<bhv_type>"

  // requestId:検索結果で返されるリクエスト ID。
  requestId :="<request_id>"

  // reach_time:サーバーがデータを受信した時刻。値は秒単位の精度の UNIX タイムスタンプです。
  reachTime :="<reach_time>"


  // user_id:リクエストを送信したユーザーの一意の ID。
  // * ほとんどの場合、ID はログオンしているユーザーの ID です。
  // * ユーザーが PC クライアントからリクエストを送信し、ログオンしていない場合、ID は 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。このパラメーターは、OpenSearch アプリケーションおよび Artificial Intelligence Recommendation (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),
  }

    // データをプッシュするには、appName および dataCollectionName パラメーターを指定する必要があります。
    // appName:データのプッシュ先アプリケーションの名前。このパラメーターをアプリケーションのバージョン情報に設定しないでください。
    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 は nil ではありません。この場合、エラー情報を表示します。
  if _request_err != nil {
      fmt.Println(_request_err)
      return
  }

  // 例外が発生しない場合は、レスポンスを表示します。
  fmt.Println(_reponse)
}

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