跳转到主要内容

使用指南

使用 vchordrq 与 vchordg 构建索引、MaxSim 多向量检索、量化类型、范围查询与性能调优。

VectorChord 的 vchordrq 索引类型会将向量划分为多个列表,并仅搜索距离查询向量最近的一部分列表。它兼具极快的构建速度与低内存占用,同时性能显著优于 hnsw 和 ivfflat。

多向量检索(Multi-Vector Retrieval)是检索增强生成(RAG)系统中的一项高级技术,通过为每个文档使用多个向量来增强文档检索能力。

VectorChord 的 vchordg 索引类型是一种基于磁盘的图索引,具有低内存占用的特点。

量化不仅可以应用于索引,还可以直接应用于向量本身。为此,VectorChord 提供了用于量化向量的数据类型。

通常我们使用 ORDER BY 和 LIMIT 子句执行向量搜索。在某些场景下,您可能希望使用 WHERE 子句过滤掉距离查询向量较远的向量。

索引构建可以并行化执行。由于并行化会增加服务器负载,PostgreSQL 默认未启用它。请参考本文配置并行构建、I/O 与共享缓冲区。

您可以通过查询 pg_stat_progress_create_index 视图来监控 PostgreSQL 索引的构建进度。

搜索参数通常通过 GUC 进行配置。VectorChord 还提供了另一种方式,允许将这些参数直接绑定到索引上,作为索引存储参数的一部分保存。

在向量搜索中,召回率(recall)是指索引返回的近似最近邻中真实最近邻所占的比例。VectorChord 提供了内置的召回率评估与查询采样工具。

PostgreSQL 启动后,表和索引只有在首次被访问时才会从存储加载到缓冲池中。使用专用预热函数可以将索引的热数据部分提前加载到内存中。

在带过滤条件的索引扫描中,预过滤(Prefilter)允许向量索引在计算向量距离之前先评估过滤条件,从而剪枝搜索空间并提升查询效率。

预取(Prefetch)能够大幅加速涉及 I/O 操作的查询。它根据索引的实际需求,主动将缓冲区预读到操作系统页缓存或 PostgreSQL 的缓冲池中。

PostgreSQL 索引会存储行标识符以及被索引列的值。启用 rerank_in_table 可避免在索引中重复存储原始向量,从而节省磁盘空间。

对于大表而言,分区阶段主导了整个索引构建的时间与内存消耗。

除了使用分区调优中的方法外,您还可以选择在其他机器或 GPU 上离线运行分区阶段,以缩短索引构建时间并降低内存消耗。