配置环境变量
配置环境变量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
}
// 组装文档
// 必备信息: 推送数据 内必须包含 primaryKey field 信息(opensearch结构表的主键字段). 否则将无法更新文档.
// 更新的其他 doc 字段及内容信息. 以 UTF-8 编码.
// opensearch 支持 'ADD' / 'UPDATE' 及 'DELETE' 命令.分别实现 新增,更新 和删除 doc 动作.
document1st := map[string]interface{}{
"cmd": "ADD",
"fields": map[string]interface{}{
"id": 1, // 如文例所示. id 为 文档主键字段.
"describe": "123456", // doc 字段.
},
}
// timestamp 信息 用以增加对 文档操作的保序能力. 系统会用该时间戳来作为同一主键文档更新顺序的判断标准.
// 在没有该timestamp项时,默认以文档发送到OpenSearch的时间作为文档更新时间进行操作。
document2nd := map[string]interface{}{
"cmd": "ADD",
"timestamp": 1401342874778,
"fields": map[string]interface{}{
"id": 2,
"describe": "123456",
},
}
// 组装推送文档 数组结构. 其中包含单条文档动作.
requestBody := []interface{}{document1st}
// 此结构可进行多个 document append 动作.
requestBody = append(requestBody, document2nd)
// 请求发送的配置参数. 用以请求配置及连接池配置.
runTime := &util.RuntimeOptions{
ConnectTimeout: tea.Int(5000),
ReadTimeout: tea.Int(10000),
Autoretry: tea.Bool(false),
IgnoreSSL: tea.Bool(false),
MaxIdleConns: tea.Int(50),
}
// 推送接口需要提供 推送 app 和表名,
// App 可以是 app 的版本信息. 也可以是 app 名称.
// 推送表为 为 目标表的名称. 可在控制台查看.
appName := "<appName>"
tableName := "<tableName>"
// 发送请求的方法调用.
response, _requestErr := client.Request(
tea.String("POST"),
tea.String("/v3/openapi/apps/"+appName+"/"+tableName+"/actions/bulk"),
nil,
nil,
requestBody,
runTime)
// 如果 发送请求 过程中出现异常. 则 返回 _requestErr 且输出 错误信息.
if _requestErr != nil {
fmt.Println(_requestErr)
return
}
// 输出正常返回的 response 内容.
fmt.Println(response)
}
说明
组装文档:具体构造细则, 请参考: 数据处理