全部产品
Search
文档中心

智能开放搜索 OpenSearch:push推送Demo

更新时间:Jul 11, 2023

配置环境变量

配置环境变量ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET

重要
  • 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维,具体操作,请参见创建RAM用户

  • 创建AccessKey ID和AccessKey Secret,请参考创建AccessKey

  • 如果您使用的是RAM用户的AccessKey,请确保主账号已授权AliyunServiceRoleForOpenSearch服务关联角色,请参考OpenSearch-行业算法版服务关联角色,相关文档参考访问鉴权规则

  • 请不要将AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。

  • LinuxmacOS系统配置方法:

    执行以下命令,其中, <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系统配置方法

    1. 新建环境变量文件,添加环境变量ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET,并写入已准备好的AccessKey ID和AccessKey Secret。

    2. 重启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)
}
说明

组装文档:具体构造细则, 请参考: 数据处理