修改向量索引

最近更新时间:2025-07-01 10:19:42

我的收藏

接口定义

modify_vector_index() 接口用于在不重建整个索引的前提下,调整已创建向量索引的配置参数,包括:数据精度类型、距离度量方式、性能优化参数等。
说明:
仅支持对稠密向量的索引参数进行调整,不支持对稀疏向量的索引参数修改。
索引类型支持 FLAT、HNSW、IVF 系列索引之间互相调整,二进制索引(BIN_FLAT)不支持调整。
HNSW 索引支持重新指定参数 M 和 efConstruction,IVF 索引支持重新指定 nlist(IVF_PQ 支持重新指定 M 和 nlist)。
仅 HNSW 索引,支持修改字段数据类型,例如:从vector(标准单精度浮点数向量)可修改为 float16_vector(半精度浮点数向量)。
支持重新指定向量相似度计算方法。
def modify_vector_index(self,
database_name: str,
collection_name: str,
vector_indexes: List[VectorIndex],
rebuild_rules: Optional[dict] = None,
timeout: Optional[float] = None) -> dict:

使用示例

import tcvectordb
from tcvectordb.model.enum import MetricType
from tcvectordb.model.index import Index, VectorIndex

#create a database client object
client = tcvectordb.RPCVectorDBClient(url='http://10.0.X.X:80', username='root', key='eC4bLRy2va******************************', read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY, timeout=30)
#设置需更新的字段,或增加新的字段
res = client.modify_vector_index(
database_name='db-test',
collection_name='book-vector',
vector_indexes=[
VectorIndex(
index_type=IndexType.HNSW,
field_type=FieldType.Float16Vector,
metric_type=MetricType.COSINE,
params={
"M": 8,
"efConstruction": 100
},
),
],
rebuild_rules={
"dropBeforeRebuild": True,
"throttle": 1,
}
)
print(res)

入参描述

参数
子参数
是否必选
参数含义
配置方法及要求
database_name
-
配置需重建索引的 Database 名称。
获取集群中的数据库列表,复制需重建索引的集合所属的数据库名。
collection_name
-
指定需 Collection 的重建索引的 Collection 名称。
获取指定数据库名下的 Collection 列表,复制需重建索引的集合名。
vector_indexes
name
稠密向量数据字段名。
固定为 vector
说明:
仅支持对稠密向量的索引参数进行调整,不支持对稀疏向量的索引参数修改。
field_type
稠密向量数据字段类型。
仅 HNSW 索引可重新指定向量索引的数据类型。默认值与当前类型一致,具体取值如下所示。
Vector:单精度浮点数向量,采用8位指数位 + 23位尾数位 + 1位符号位(共32位),适用于需最高精度的计算任务或对误差敏感的向量检索。
Float16Vector:半精度浮点数向量,采用5位指数位 + 10位尾数位 + 1位符号位 的格式,适用于尾数精度较高(小数点后保留更多位数)的场景,如 bge-large 等模型生成的嵌入向量。
BFloat16Vector:bfloat16 浮点数向量,采用8位指数位 + 7位尾数位 + 1位符号位的格式,适用于向量数值范围较大(更多bit位表达整数)的场景。
index_type
指定调整后的目标索引类型。如果无需调整索引类型,该参数可不填。
默认与原索引类型一致,取值如下所示。
说明:
索引类型支持 FLAT、HNSW、IVF 系列索引之间互相调整,二进制索引(BIN_FLAT)不支持调整。
切换索引类型时,请同步修改 params 参数,与目标索引类型的参数保持一致。
FLAT 和 IVF 索引不支持 float16_vector 或 bfloat16_vector,当从 HNSW 索引类型切换到 FLAT 或 IVF 类型时,如果字段类型(fieldType)为 float16_vector 或 bfloat16_vector,则必须同步将字段类型修改为 vector 类型。
索引切换时需要注意提前预估内存占用,尤其是在 IVF 系列索引切换成 FLAT/HNSW 时,内存差异可能较大。
FLAT:暴力检索,召回率100%,但检索效率低,适用10万以内数据规模。
HNSW:召回率95%+,可通过参数调整召回率,检索效率高,但数据量大后写入效率会变低,适用于10万-1亿区间数据规模。
IVF_FLAT、IVF_PQ、IVF_SQ4, IVF_SQ8, IVF_SQ16:IVF 系列索引,适用于上亿规模的数据集,检索效率高,内存占用低,写入效率高。
metric_type
重新指定相似度计算方法。

指定向量之间距离度量的算法。取值如下:
L2:全称是 Euclidean distance,指欧几里得距离,它计算向量之间的直线距离,所得的值越小,越与搜索值相似。L2在低维空间中表现良好,但是在高维空间中,由于维度灾难的影响,L2的效果会逐渐变差。
IP:全称为 Inner Product,是一种计算向量之间相似度的度量算法,它计算两个向量之间的点积(内积),所得值越大越与搜索值相似。
COSINE:余弦相似度(Cosine Similarity)算法,是一种常用的文本相似度计算方法。它通过计算两个向量在多维空间中的夹角余弦值来衡量它们的相似程度,所得值越大越与搜索值相似。
params
重新指定向量索引参数。
索引类型 indexType 为 HNSW ,需配置如下参数。
M:每个节点在检索构图中可以连接多少个邻居节点。
取值类型:uint64。
取值范围:[4,64]。一般可设置为16。
efConstruction:搜索时,指定寻找节点邻居遍历的范围。数值越大构图效果越好,构图时间越长。
取值类型:uint64。
取值范围:[8,512]。一般可设置为200。
索引类型 indexType IVF_FLAT、 IVF_PQ、 IVF_SQ4, IVF_SQ8, IVF_SQ16需配置如下参数。
nlist :指索引中的聚类中心数量。
取值类型:uint64。取值范围:[1,65536]。
M: 指乘积量化中原始数据被拆分的子向量的数量。该参数仅 IVF_PQ 索引类型需配置。更多信息,请参见 索引与计算
取值要求:原始数据的向量的维度 D(即向量中元素的个数)必须能够被 m 整除,m 必须是一个正整数。
取值范围:[1,向量维度]。
rebuild_rules
drop_before_rebuild
标识在重建索引时,是否需先删除旧索引再重建新索引。
警告:
重建索引需要占用额外的内存空间,数据量越大,消耗的内存空间越大。在重建索引之前,您需根据实际资源情况选择是否需先删除旧索引再重建,避免引起内存占满而阻塞业务正常运行。

取值如下所示:
True:重建之前,先删除旧索引再重建索引。
警告:
内存资源不足时,可配置为 true,先删除旧索引,在新索引构建过程中,无法正常读写。
False:重建之前,不删除旧索引,创建新索引完成之后再删除旧索引。默认为 False。
警告:
内存资源足够的情况下,可配置为 false,可不删除旧索引。在新索引构建过程中,可读数据,禁止写入数据。
throttle
标识是否限制构建索引的单节点 CPU 核数。
说明:
重建索引会消耗 CPU 资源,为防止资源打满影响写入或者检索等操作,请根据业务实际配置重建索引的 CPU 核数。默认为限制 CPU 核数为1。
取值如下所示:
0:不限制 CPU 核数。在模型训练期间,会消耗大量的 CPU 资源。重建索引任务将会尽快执行,但可能会对其他集合的读写操作产生影响。
1~节点 CPU 核数:可用于 rebuild 的 CPU 资源最大为实例单个节点规格的 CPU 核数,可避免构建索引期间对其他集合产生影响,但任务执行较慢。

出参描述

{
"code": 0,
"msg": "Start rebuilding. You can use the '/collection/describe' API to follow the progress of rebuilding."
}
参数名
参数含义
msg
提示启动 rebuild 重建索引,可使用 /collection/describe 接口返回的参数 indexStatus 查看集合索引状态。
initial:表示首次创建索引,尚未 Rebuild 构建索引。
ready:表示当前 Collection 准备就绪,可正常使用。
training:表示当前 Collection 正在进行数据训练,即训练模型已生成向量数据。
building:表示当前 Collection 正在重建索引,即将生成的向量数据存储到新的索引中。
failed:重建索引失败,可能会影响集合读写操作。