腾讯云向量数据库(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),索引的存储需求和搜索精度也随之增加,搜索速度可能会有所降低。 |
选择索引类型
配置索引参数
索引类型 | 参数 | 参数含义 | 参数设置 |
FLAT | - | - | - |
HNSW | M | 每个节点在检索构图中可以连接多少个邻居节点。 | M 值过大会影响写入效率。若无特殊要求,可直接使用默认参数16。 |
| efConstruction | 指定寻找节点邻居遍历的范围。 | 数值越大构图效果越好,构图时间越长。 默认为200。efConstruction 越大,召回率越高,但会影响写入效率。若无特殊要求,可直接使用默认参数。 检索时,可通过该参数调节召回率,默认为100。efConstruction 越大,召回率越高,但同时检索效率会降低。具体测试数据,请参见性能白皮书的 测试结果。 |
IVF | nlist | 聚类中心个数。 | - |
| M | IVF_PQ 索引,构建数据表时,指定乘积量化中原始数据被拆分的子向量的数量。 | 每个子向量的维度为 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 类型。插入数据时动态增加的标量字段暂不支持创建索引。
向量相似度计算
相似性计算方法是向量检索的基础,用于衡量高维向量数据之间的相似度。在创建 Collection 时,需要依据数据特征,选择合适的相似性计算方法。下表展示了这些广泛使用的相似性计算方法如何与各种输入数据形式和腾讯云向量数据库(Tencent Cloud VectorDB)索引相匹配。
相似性计算方法 | 数据格式 | 向量索引类型 |
内积(IP) | 浮点型 | FLAT、HNSW、IVF 系列 |
欧式距离(L2) | | |
余弦相似度(COSINE) | | |
内积(IP)
全称为 Inner Product,内积也称点积,计算结果是一个数。它计算两个向量之间的点积(内积),其计算公式如下所示。其中,a = (a1, a2,..., an) 和 b = (b1, b2,..., bn) ,是 n 维空间中的两个点。计算所得值越大,越与搜索值相似。
欧式距离(L2)
欧式距离(L2)全称为 Euclidean distance,指欧几里得距离。它计算两个向量点在空间中的直线距离。计算公式如下所示。其中,a = (a1, a2,..., an) 和 b = (b1, b2,..., bn) 是 n 维空间中的两个点。它是最常用的距离度量。计算所得的值越小,越与搜索值相似。L2在低维空间中表现良好,但是在高维空间中,由于维度灾难的影响,L2的效果会逐渐变差。
余弦相似度(COSINE)
余弦相似度(Cosine Similarity)算法,是一种常用的文本相似度计算方法。它通过计算两个向量在多维空间中的夹角余弦值来衡量它们的相似程度。其计算公式如下所示。其中,a = (a1, a2,..., an) 和 b = (b1, b2,..., bn) 是 n 维空间中的两个点。|a|与|b|分别代表 a 和 b 归一化后的值。cosθ 代表 a 与 b 之间的余弦夹角。计算所得值越大,越与搜索值相似。取值范围为[-1,1]。
说明:
在向量归一化之后,内积与余弦相似度等价。余弦相似性只考虑向量夹角大小,而内积不仅考虑向量夹角大小,也考虑了向量的长度差。