配置環境變數
配置環境變數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)
}
說明
組裝文檔:具體構造細則, 請參考: 資料處理