腾讯云向量数据库(Tencent Cloud VectorDB)在建表时,需指定不同字段的索引类型,数据存储时将会按照指定的索引类型进行索引;在检索时,便会依据索引并使用已选择的相似性计算方法进行匹配,快速高效地获取目标数据。腾讯云向量数据库(Tencent Cloud VectorDB)支持主键索引、向量索引和 Filter 索引,各自适用于不同的查询场景。
向量索引
向量索引(Vector Index)是基于某种数学模型,对向量数据构建一种时间和空间上更高效的数据结构,以便高效地查询与目标向量相似的若干个向量。当前向量化数据库支持 FLAT、HNSW、 IVF 系列向量索引方式。
说明:
Base 类数据库在创建 Collection 时便需要指定向量数据具体的索引方式,而 AI 类数据库在创建 CollectionVIew 时无需指定向量索引,系统自动构建。
向量索引类型
向量索引类型 | 索引说明 | 细分类别 | 细分类别说明 |
FLAT | FLAT 索引,向量数据会以浮点型的方式进行存储,不做任何压缩处理。搜索向量会遍历所有向量与目标向量进行比较。 | - | - |
HNSW | HNSW(Hierarchical Navigable Small World Graphs)算法通过构建一个分层的图结构来组织和索引向量数据。图结构从顶层到底层,每一层的节点和边逐层密集。每个节点代表一个向量,而边则表示向量之间的相似性或接近度。 新插入节点,根据其特征和已有节点的分布被分配到不同的层,与一定数量的最相似的邻居建立连接。 在搜索时,查询向量从顶层开始,通过在顶层找到最接近的节点,快速跳过大量不相关的数据点,再以这个接近的节点作为新的起点,沿着路径向下移动到更密集的层级,每一层的检索都是在上一层筛选后的结果集上进行,直到在底层找到最接近的向量。 | - | - |
IVF 系列 | 全称为 Inverted File,IVF 系列索引,是基于倒排索引和向量量化的高效近似最近邻搜索算法。其核心思想是将整个高维向量空间通过算法(如 k-means、DBSCAN 等)划分为多个预定义的聚类中心,并为每个聚类中心构建一个倒排文件,倒排索引表与这些聚类中心一一对应,每个表维护着一个向量列表。 在构建索引时,将数据集中的每个数据点分配到距离其最近的聚类中心所在的倒排索引表中。 当进行向量检索时,输入向量会在最相似的聚类中心进行检索,从而减少搜索空间,提高检索效率。 | IVF_FLAT | 基于倒排文件(inverted file)的索引结构,该索引在检索时,对每个聚类中的向量进行扁平扫描,计算它们与目标向量的距离,并选择最近的向量作为搜索结果。 |
| | IVF_PQ | 基于乘积量化(Product Quantization)的向量索引算法,通过将高维向量分割成多个子向量,并对每个子向量进行聚类,生成码本,然后将原始向量映射为一组离散的码本索引。 |
| | IVF_SQ4, IVF_SQ8, IVF_SQ16 | 基于标量量化(Scalar Quantization)的索引方式,将原始的高维向量分割成多个较小的向量块,每个小向量块通过量化过程被转换为一个较低精度的表示形式,通常是4比特(即0.5字节)的整数。例如:4、8、16比特。随着量化精度的提高(从 SQ4 到 SQ16),索引的存储需求和搜索精度也随之增加,搜索速度可能会有所降低。 |
BIN_FLAT | 用于处理二进制向量数据的索引类型。二进制向量通常表示数据点,每个向量由一系列二进制值(0或1)组成,BIN_FLAT 索引并不对二进制向量进行压缩,适用于图像二值数据或者其他二进制特征数据的处理场景。 | - | - |
配置索引参数
索引类型 | 参数 | 参数含义 | 参数设置 |
FLAT | - | - | - |
HNSW | M | 每个节点在检索构图中可以连接多少个邻居节点。 | 取值范围:[4,64]。 M 值过大会影响写入效率。维度低于768,M 建议为16;维度高于768,M 建议为24~32。 |
| efConstruction | 写入数据时,指定寻找节点邻居遍历的范围。 | 数值越大构图效果越好,构图时间越长。 取值范围:[8,512], 写入时,默认为200。若无特殊要求,可直接使用默认参数。 |
| ef | 检索数据时,控制动态候选元素集合的大小。 | 取值范围[1,32768],默认为10。 ef 参数越大,遍历的元素越多,召回率越高,但是检索性能会下降。维度低于768,ef 值建议为200;维度高于768,ef 值建议为500。 |
IVF | nlist | 聚类中心个数。 | 建议取值范围为:[sqrt(单分片数据量) * 4, sqrt(单分片数据量) * 16]。 |
| M | IVF_PQ 索引,构建数据表时,指定乘积量化中原始数据被拆分的子向量的数量。 | 每个子向量的维度为 D/M,其中 D 是原始向量的维度。M 必须能被 D (原始向量的维度)整除。 |
| nprobe | 检索数据时,指定所需查询的单位数量。 | 取值范围[1,nlist]。 |
主键索引
为了确保数据库表中的每一行数据都可以被唯一地识别和访问,数据库中的每一条数据(通常称为记录或行)都需定义一个唯一的标识符,这个标识符被称为主键(Primary Key)。在整个数据表中,主键具有唯一性、不变性与非空性。主键索引(Primary Key Index)是基于主键来快速查找特定行数据的检索方式。
说明:
Base 类向量数据库默认将 Document id 作为主键来构建主键索引,而 AI 类数据库对应将 DocumentSet ID 作为主键构建索引。
Filter 索引
Filter 索引(Filter Index)是建立在标量字段的索引。标量字段被建立 Filter 索引之后,向量检索时,将依据 Filter 指定的标量字段的条件表达式来过滤查询和范围查询来匹配相似向量。当前所支持的数据类型与对应的条件表达式,请参见 Filter 条件表达式。
说明:
在创建 Collection 或 CollectionView 时,Filter 索引指定标量字段支持 string、uint64、array 类型。插入数据时动态增加的标量字段暂不支持创建索引。