多路搜索

配置环境变量

配置环境变量ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET

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

  • 创建AccessKey IDAccessKey Secret,请参考创建AccessKey

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

  • 请不要将AccessKey IDAccessKey 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 IDAccessKey Secret。

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