简介
本文档介绍如何使用对象存储 COS 的 Go SDK 列举向量存储桶中的索引列表。
功能说明
ListIndexes 方法用于获取指定向量存储桶中存在的所有向量索引列表。为了便于管理大量的索引,该接口支持基于前缀筛选(仅返回名称匹配指定前缀的索引)以及分页查询能力。方法原型
func (s *VectorService) ListIndexes(ctx context.Context, opt *ListIndexesOptions) (*ListIndexesResult, *Response, error)
请求参数说明
ListIndexesOptions 结构体字段说明:参数 | 描述 | 类型 | 是否必填 |
VectorBucketName | 向量桶名称,格式为 <BucketName-APPID>,例如 examplebucket-1250000000。 | string | 是 |
MaxResults | 设定响应中返回的最大索引数量。 | int | 否 |
NextToken | 分页标记,当结果无法在一次请求中全部返回时,响应中将包含该字段。下次请求通过传递该字段获取下一页结果。 | string | 否 |
Prefix | 索引名称前缀过滤参数,如果填写该项,系统将只返回以该前缀开头的索引。 | string | 否 |
返回结果说明
调用成功后,将返回
(*ListIndexesResult, *Response, error) 三个值。
ListIndexesResult 结构体字段说明:参数 | 描述 | 类型 |
Indexes | 包含本页获取到的向量索引简要信息列表。 | []IndexBrief |
NextToken | 如果索引列表未拉取完,则返回下一页的 Token,以便后续请求继续获取。 | string |
IndexBrief 结构体字段说明:参数 | 描述 | 类型 |
IndexQcs | 向量索引资源名称(QCS)。 | string |
IndexName | 索引名称。 | string |
VectorBucketName | 向量桶名称。 | string |
CreationTime | 创建时间的时间戳。 | int64 |
其他返回值说明:
返回值 | 描述 | 类型 |
resp | 响应头信息,包含 HTTP 响应的详细对象等。 | *cos.Response |
err | 错误信息。如果请求成功,返回 nil。 | error |
如果请求失败,将返回非
nil 的 error。向量检索相关的业务错误会封装为 *cos.VectorErrorResponse 结构,您可以通过 cos.IsVectorError() 辅助函数判断并获取详细错误信息。详细的错误处理方式、VectorErrorResponse 结构体说明及服务端错误码列表请参见 异常处理 文档。使用案例
package mainimport ("context""fmt""net/http""os"cos "github.com/tencentyun/cos-go-sdk-v5")func main() {// 生成 Vector 基础 URL,第二个参数控制是否使用 HTTPS,建议为 truevectorURL, _ := cos.NewVectorURL("ap-guangzhou", true)// 初始化 Client,设置 VectorURL 及鉴权client := cos.NewClient(&cos.BaseURL{VectorURL: vectorURL}, &http.Client{Transport: &cos.AuthorizationTransport{SecretID: os.Getenv("COS_VECTORS_SECRET_ID"),SecretKey: os.Getenv("COS_VECTORS_SECRET_KEY"),},})// 向量桶名称格式必须为:BucketName-APPIDbucketName := "examplebucket-1250000000"// 构造列举索引的参数opt := &cos.ListIndexesOptions{VectorBucketName: bucketName,MaxResults: 100, // 最大返回数量// Prefix: "my-", // 索引名前缀过滤,可选项// NextToken: "", // 分页标记,用于获取下一页,首次查询留空或不填}// 调用列举索引方法res, _, err := client.Vector.ListIndexes(context.Background(), opt)if err != nil {if vecErr, ok := cos.IsVectorError(err); ok {fmt.Printf("向量服务错误,错误码: %s, 错误信息: %s, 请求ID: %s\\n",vecErr.Code, vecErr.Message, vecErr.RequestID)} else {fmt.Printf("请求失败: %v\\n", err)}return}fmt.Println("当前拥有的向量索引列表:")for _, index := range res.Indexes {fmt.Printf("索引名称: %s, 所属桶: %s, 创建时间: %d\\n", index.IndexName, index.VectorBucketName, index.CreationTime)}// 演示如何判断是否存在下一页if res.NextToken != "" {fmt.Printf("发现更多数据,可使用下一页 Token 继续拉取: %s\\n", res.NextToken)// 将 res.NextToken 赋值给 opt.NextToken 再次发起请求即可获取下一页数据}}