配置环境变量
配置环境变量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系统生效。
代码示例
package main
import (
"fmt"
util "github.com/alibabacloud-go/tea-utils/service"
"github.com/alibabacloud-go/tea/tea"
opensearch "main/client"
"os"
)
func main() {
// 创建请求用客户端实例
// Endpoint 为 要访问服务的区域域名.
// AccessKeyId 及AccessKeySecret 用于构造鉴权信息.
config := &opensearch.Config{
Endpoint: tea.String("<Endpoint>"),
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 过程中出现异常. 则 返回 _clientErr 且输出 错误信息.
if _clientErr != nil {
fmt.Println(_clientErr)
return
}
// 自行书写 requestBody 信息 , 查询相关请求构造可参数可参考: https://help.aliyun.com/zh/open-search/industry-algorithm-edition/multiple-search
requestBody := map[string]interface{}{
"queries": []map[string]interface{}{
{
"query": "default:'黑白' AND default:'马裤'",
"first_rank_name": "default",
"second_rank_name": "sys_second_default",
"total_rank_size": 10000,
"total_rerank_size": 1000,
"path": "sub",
"priority": 1,
"quota": 100,
"qp": "sys_default",
},
{
"query": "default:'男子休闲复古篮球鞋'",
"first_rank_name": "default",
"second_rank_name": "default",
"total_rank_size": 10000,
"total_rerank_size": 1000,
"path": "sub1",
"priority": 1,
"quota": 100,
"qp": "sys_default",
},
{
"query": "default:'情节款'",
"first_rank_name": "default",
"second_rank_name": "sys_second_default",
"total_rank_size": 10000,
"total_rerank_size": 1000,
"path": "sub2",
"priority": 1,
"quota": 100,
"qp": "sys_default",
},
{
"query": "default:'服装'",
"first_rank_name": "default",
"second_rank_name": "sys_second_default",
"total_rank_size": 10000,
"total_rerank_size": 1000,
"path": "sub3",
"priority": 1,
"quota": 100,
"qp": "sys_default",
},
{
"query": "default:'耐克运动鞋'",
"first_rank_name": "default",
"second_rank_name": "sys_second_default",
"total_rank_size": 10000,
"total_rerank_size": 1000,
"path": "main",
"priority": 1,
"quota": 100,
"sort": "+pk",
"qp": "sys_default",
},
},
"raw_query": "耐克运动鞋",
"start": 0,
"hit": 10,
"format": "fulljson",
"trace": "info",
"rank_trace": "info",
"user_id": "1865410598556969",
"vector_search": map[string]interface{}{
"vector": map[string]interface{}{
"top_n": 100,
"namespaces": []string{},
"threshold": 0.5,
"search_params": map[string]interface{}{
"qc_scan_ratio": 0.01,
},
},
},
"unified_rank_type": "cava_script",
"unified_rank_size": 500,
"unified_rank_name": "ctr",
}
// 请求发送的配置参数. 用以请求配置及连接池配置.
runtime := &util.RuntimeOptions{
ConnectTimeout: tea.Int(5000),
ReadTimeout: tea.Int(10000),
Autoretry: tea.Bool(false),
IgnoreSSL: tea.Bool(false),
MaxIdleConns: tea.Int(50),
}
// 搜索接口需要提供 appName.
// App 可以是 app 的版本信息. 也可以是 app 名称.
appName := "<appName>"
// 发送请求的方法调用.
response, _requestErr := client.Request(
tea.String("POST"),
tea.String("/v3/openapi/apps/" + appName + "/multi-path-search"),
nil,
nil,
requestBody,
runtime)
// 如果 发送请求 过程中出现异常. 则 返回 _requestErr 且输出 错误信息.
if _requestErr != nil {
fmt.Println(_requestErr)
return
}
// 输出正常返回的 response 内容.
fmt.Println(response)
}该文章对您有帮助吗?