配置环境变量
配置环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
重要
阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维,具体操作,请参见创建RAM用户。
创建AccessKey ID和AccessKey Secret,请参考创建AccessKey。
如果您使用的是RAM用户的AccessKey,请确保主账号已授权AliyunServiceRoleForOpenSearch服务关联角色,请参考OpenSearch-行业算法版服务关联角色,相关文档参考访问鉴权规则。
请不要将AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
Linux和macOS系统配置方法:
执行以下命令,其中,
<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系统配置方法
新建环境变量文件,添加环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET,并写入已准备好的AccessKey ID和AccessKey Secret。
重启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
}