CreateVikingIndex 用于为指定的数据集 Collection 创建索引 Index。
创建索引可以加速向量的相似度搜索,它根据指定的索引算法和数据结构将向量库中的原始数据进行分组排序,提高相似度搜索的效率和准确性,是驱动向量数据库在短时间内筛选出候选的核心所在。
对于索引的数据集只存在稠密向量(即 vector 类型字段)的情况,我们称这种索引为纯稠密索引;对于索引的数据集中存在稠密向量和稀疏向量(vector 和 sparse_vector 类型字段)的情况,我们称这种索引为混合索引。
Go SDK 通过 vikingdb.New(sess) 创建的客户端实例调用 CreateVikingdbIndex(input) 方法发起索引创建请求,input 参数类型为 vikingdb.CreateVikingdbIndexInput ,包含索引创建所需的完整配置信息
请求参数是 CreateIndexParam,CreateIndexParam 类包括的参数如下表所示。
参数 | 类型 | 是否必选 | 参数说明 |
|---|---|---|---|
ProjectName | string | 否 | 项目名称 |
CollectionName | string | 2选1 | 数据集名称 |
ResourceId | string | 数据集资源ID。请求必须指定ResourceId和CollectionName其中之一。 | |
IndexName | string | 是 | 指定创建的索引 Index 名称。
|
Description | string | 否 | 索引的自定义描述。 |
ScalarIndex | []string | 否 | 标量字段列表,用于设置需要构建到标量索引的字段。 |
ShardPolicy | ShardPolicyEnum | 否 | 索引分片类型
|
ShardCount | int | 否 | 自定义分片数。 |
CpuQuota | int | 否 | 索引检索消耗的 CPU 配额,格式为正整数。 |
VectorIndex | VectorIndexForCreateVikingdbIndexInput | 是 | 见下 |
参数 | 类型 | 是否必选 | 默认值 | 参数说明 |
|---|---|---|---|---|
IndexType | IndexTypeEnum | 是 | IndexType.HNSW | 向量索引类型。取值如下:
|
Distance | DistanceEnum枚举 | 否 | DistanceType.IP | 距离类型,衡量向量之间距离的算法。取值如下:
对于hnsw_hybrid索引算法,距离类型选择只对稠密向量生效,稀疏向量仅支持内积。 |
Quant | QuantEnum枚举 | 否 | QuantType.Int8 | 量化方式。量化方式是索引中对向量的压缩方式,可以降低向量间相似性计算的复杂度。基于向量的高维度和大规模特点,采用向量量化可以有效减少向量的存储和计算成本。取值如下:
|
HnswM | int | 否 | 20 | hnsw 索引参数,表示邻居节点个数。
|
HnswCef | int | 否 | 400 | hnsw 索引参数,表示构建图时搜索邻居节点的广度。
|
HnswSef | int | 否 | 800 | hnsw 索引参数,表示线上检索的搜索广度。
|
DiskannM | int | 否 | diskann参数,标识邻居节点个数。
| |
DiskannCef | int | 否 | diskann参数,表示构建图时搜索邻居节点的广度。
| |
PqCodeRatio | float | 否 | diskann参数,向量维度编码的大小限制。值越大,召回率越高,但会增加内存使用量,范围 (0.0, 0.25]。
| |
CacheRatio | float | 否 | diskann参数,缓存节点数与原始数据的比率,较大的值会提高索引性能并增加内存使用量。范围 [0.0,0.3)。
|
参数 | 类型 | 示例值 | 描述 |
|---|---|---|---|
Message | String | success | 操作结果信息 |
package main import ( "fmt" "os" "github.com/volcengine/volcengine-go-sdk/service/vikingdb" "github.com/volcengine/volcengine-go-sdk/volcengine" "github.com/volcengine/volcengine-go-sdk/volcengine/credentials" "github.com/volcengine/volcengine-go-sdk/volcengine/session" ) func main() { var ( accessKey = os.Getenv("VIKINGDB_AK") secretKey = os.Getenv("VIKINGDB_SK") region = "cn-beijing" ) config := volcengine.NewConfig(). WithRegion(region). WithCredentials(credentials.NewStaticCredentials(accessKey, secretKey, "")) sess, err := session.NewSession(config) if err != nil { panic(err) } svc := vikingdb.New(sess) input := &vikingdb.CreateVikingdbIndexInput{ CollectionName: volcengine.String("Your Collection Name"), IndexName: volcengine.String("Your Index Name"), Description: volcengine.String("Your Index Description"), ProjectName: volcengine.String("default"), VectorIndex: &vikingdb.VectorIndexForCreateVikingdbIndexInput{ IndexType: volcengine.String(vikingdb.EnumOfIndexTypeForCreateVikingdbIndexInputHnsw), Distance: volcengine.String(vikingdb.EnumOfDistanceForCreateVikingdbIndexInputL2), Quant: volcengine.String(vikingdb.EnumOfQuantForCreateVikingdbIndexInputFloat), HnswM: volcengine.Int32(16), HnswCef: volcengine.Int32(200), HnswSef: volcengine.Int32(200), }, ScalarIndex: volcengine.StringSlice([]string{"title"}), } output, err := svc.CreateVikingdbIndex(input) if err != nil { panic(err) } fmt.Printf("Create index response: %+v\n", output) }