createIndex 用于为指定的数据集 Collection 创建索引 Index。
创建索引可以加速向量的相似度搜索,它根据指定的索引算法和数据结构将向量库中的原始数据进行分组排序,提高相似度搜索的效率和准确性,是驱动向量数据库在短时间内筛选出候选的核心所在。
对于索引的数据集只存在稠密向量(即 vector 类型字段)的情况,我们称这种索引为纯稠密索引;对于索引的数据集中存在稠密向量和稀疏向量(vector 和 sparse_vector 类型字段)的情况,我们称这种索引为混合索引。
请求参数是 CreateIndexParam,CreateIndexParam 类包括的参数如下表所示。
参数 | 子参数 | 类型 | 是否必选 | 默认值 | 参数说明 |
---|---|---|---|---|---|
collectionName | string | 是 | 指定创建索引所属的 Collection 名称。
| ||
indexName | string | 是 | 指定创建的索引 Index 名称。
| ||
vectorIndex 说明 VectorIndexParams实例。 | indexType | string | 是 | IndexType.HNSW | 向量索引类型。取值如下:
|
distance | string | 否 | DistanceType.IP | 距离类型,衡量向量之间距离的算法。取值如下:
对于hnsw_hybrid索引算法,距离类型选择只对稠密向量生效,稀疏向量仅支持内积。 | |
quant | string | 否 | QuantType.Int8 | 量化方式。量化方式是索引中对向量的压缩方式,可以降低向量间相似性计算的复杂度。基于向量的高维度和大规模特点,采用向量量化可以有效减少向量的存储和计算成本。取值如下:
| |
hnswM | 数值 | 否 | 20 | hnsw 索引参数,表示邻居节点个数。
| |
hnswCef | 数值 | 否 | 400 | hnsw 索引参数,表示构建图时搜索邻居节点的广度。
| |
hnswSef | 数值 | 否 | 800 | hnsw 索引参数,表示线上检索的搜索广度。
| |
cpuQuota | int | 否 | 2 | 索引检索消耗的 CPU 配额,格式为正整数。
| |
description | string | 否 | ”“ | 索引的自定义描述。 | |
partitionBy | string | 否 | “” | partitionBy 用于划分子索引 partition 。根据某个标量字段可以将数据集划分成不同的子数据集,不同的子数据集构建为不同的子索引,实现混合检索时在子索引内检索并减少过滤,从而提升检索性能。
| |
scalarIndex | array | 否 | None | 标量字段列表。
| |
shard_count | int | 否 | 分片数。索引分片是指在大规模数据量场景下,可以把索引数据切分成多个小的索引块,分发到同一个集群不同节点进行管理,每个节点负责存储和处理一部分数据,可以将查询负载分散到不同的节点上,并发的进行处理。当一个节点发生故障时,系统可以自动将其上的分片数据迁移到其他的正常节点上,保证稳定性,以实现数据的水平扩展和高性能的读写操作。
|
VectorIndexParams vectorIndex = new VectorIndexParams() .setDistance(DistanceType.COSINE) .setIndexType(IndexType.HNSW_HYBRID) .setQuant(QuantType.Float) .build(); List<String> scalarIndex = new ArrayList<>(); scalarIndex.add("price"); scalarIndex.add("aim"); CreateIndexParam createIndexParam = new CreateIndexParam() .setCollectionName("javaSDKTest") .setIndexName("test_index") .setDescription("this is a test for index") .setCpuQuoat(5) .setVectorIndex(vectorIndex) .setScalarIndex(scalarIndex) .setPartitionBy("like") .build(); Index index = vikingDBService.createIndex(createIndexParam); System.out.println(index);
Java 调用执行上面的任务,返回 Index 实例。Index 实例包含的属性如下表所示。
属性 | 类型 | 说明 |
---|---|---|
collectionName | string | 显示索引所属的 Collection 名称。 |
indexName | string | 显示索引 Index 名称。 |
description | string | 显示索引的描述。 |
cpuQuota | int | 显示索引线上检索消耗的 CPU 配额。如果检索消耗的 CPU 超过配额,该索引会被限流。 |
partitionBy | string | partitionBy 用于划分子索引 partition,对应字段名称 fieldName。根据某个标量字段可以将数据集划分成不同的子数据集,不同的子数据集构建为不同的子索引,实现混合检索时在子索引内检索并减少过滤,从而提升检索性能。 |
vectorIndex | VectorIndexParams | 向量索引参数。 |
scalarIndex | ArrayList | 标量索引字段列表。 |
status | String | 索引状态。取值如下:
|
shardCount | int | 分片数。 |
createTime | string | 索引创建时间。 |
updateTime | string | 索引更新时间。 |
updatePerson | string | 索引更新人。 |
indexCost | map |
|