接口定义
modify_vector_index() 接口用于修改 Base 类 Collection 的向量索引参数。
说明:
当前该接口仅针对稠密向量,即 vector 字段进行修改。
支持重新指定向量索引参数,HNSW 支持重新指定参数 M 和 efConstruction,IVF 索引支持重新指定 nlist(IVF_PQ 支持重新指定 M 和 nlist)。
支持重新指定相似度计算方法,暂不支持更换索引类型。
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:
使用示例
注意:
索引重建过程中 Collection 禁止写入、读取。
重建索引需要新的内存来构建索引。
import tcvectordbfrom tcvectordb.model.enum import MetricTypefrom tcvectordb.model.index import Index, VectorIndex#create a database client objectclient = 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(metric_type=MetricType.COSINE,params={"M": 8,"efConstruction": 100},),],rebuild_rules={"dropBeforeRebuild": True,"throttle": 1,})print(res)
入参描述
参数 | 子参数 | 是否必选 | 参数含义 | 配置方法及要求 |
database_name | - | 是 | 配置需重建索引的 Database 名称。 | |
collection_name | - | 是 | 指定需 Collection 的重建索引的 Collection 名称。 | |
vector_indexes | name | 是 | 稠密向量数据字段名。 | 固定为 vector。 |
| 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:重建之前,先删除旧索引再重建索引。 说明: 内存资源不足时,可先删除旧索引,在新索引还没有创建完成之前,该表无法正常读写。 false:重建之前,不删除旧索引,创建新索引完成之后再删除旧索引。默认为 false。 说明: 内存资源足够的情况下,可不删除旧索引。在新索引还没有创建完成之前,该表可读数据,禁止写入数据。 |
| throttle | 否 | 标识是否限制构建索引的单节点 CPU 核数。 说明: 重建索引会消耗 CPU 资源,为防止资源打满影响写入或者检索等操作,请根据业务实际配置重建索引的 CPU 核数。 | 取值如下所示: 0:不限制 CPU 核数。 1:CPU 核数为 1,默认为 1。 |
出参描述
{"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:重建索引失败,可能会影响集合读写操作。 |