vector
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pgvector | 0.8.6 | RAG | PostgreSQL | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 1800 | vector | 否 | 是 | 否 | 是 | 否 | 是 | - |
| 相关扩展 | vchord vectorscale pgcontext vectorize pg_rrf pg_search vchord_bm25 pg_bestmatch pgml pg4ml |
|---|---|
| 下游依赖 | ai alloydb_scann avocado documentdb embedding_search hybrid_search maludb_core pg_cuvs pg_diskann pg_gembed pg_knowledge_graph pg_llm pg_llm_helper pg_search pg_semantic_cache pg_sentence_transformer pg_splade pg_turboquant pgcontext_pgvector pgedge_vectorizer pgmnemo pgpu pgturbohybrid pgvecutils rag rag_bge_small_en_v15 rag_jina_reranker_v1_tiny_en rds_ai rds_embedding vchord vectorize vectorscale |
Upstream and source archive are at pgvector 0.8.6; indexed PGDG RPM and DEB packages remain at 0.8.5 for PostgreSQL 14-18.
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PGDG | 0.8.6 | 1817161514 | pgvector | - |
| RPM | PGDG | 0.8.6 | 1817161514 | pgvector_$v | - |
| DEB | PGDG | 0.8.6 | 1817161514 | postgresql-$v-pgvector | - |
构建
您可以使用 pig build 命令构建 pgvector 扩展的 RPM / DEB 包:
安装
您可以直接安装 pgvector 扩展包的预置二进制包,首先确保 PGDG 仓库已经添加并启用:
使用 pig 或者是 apt/yum/dnf 安装扩展:
创建扩展:
用法
来源:
pgvector 在 PostgreSQL 内提供向量相似性搜索。扩展名为 vector,Pigsty 将其打包为 pgvector。它支持精确搜索、使用 HNSW 与 IVFFlat 索引的近似最近邻搜索,以及用于稠密、半精度、二进制和稀疏嵌入的多种向量表示。
版本 0.8.6 是一个专注于正确性的修复版本,同时保留了当前 README 中介绍的 0.8.x HNSW 迭代扫描与维护改进。
创建与查询向量
常用距离操作符:
<->:L2 距离<#>:负内积<=>:余弦距离<+>:L1 距离<~>:二进制向量的汉明距离<%>:二进制向量的杰卡德距离
由于 PostgreSQL 索引按升序扫描,<#> 返回负内积;显示实际内积时应乘以 -1。
向量类型
vector 是标准单精度类型。可使用 halfvec 降低存储和内存压力,使用 bit 表示二进制签名,并使用 sparsevec 表示高维稀疏向量。
avg() 和 sum() 等聚合函数可以用于向量列:
HNSW 索引
HNSW 在速度与召回率之间提供良好的权衡,且不需要训练步骤。
请选择与距离匹配的操作符类:
常用调优设置包括 hnsw.ef_search、hnsw.iterative_scan、hnsw.max_scan_tuples 和 hnsw.scan_mem_multiplier。
IVFFlat 索引
IVFFlat 在构建索引时需要训练聚类列表,因此创建索引之前必须已有具备代表性的数据。
表越大,应增加 lists;要提高召回率,则增加 ivfflat.probes。对于带过滤条件的查询,应测试精确的 btree 过滤器、部分向量索引或分区中哪一种能产生更好的执行计划。
过滤与混合搜索
普通 PostgreSQL 过滤条件可以与向量排序组合使用:
进行混合搜索时,可以将 pgvector 与 PostgreSQL 全文搜索、三元组搜索或外部排序表达式组合使用:
维护
HNSW 索引可能很大,构建成本也可能很高。构建时使用 maintenance_work_mem,监控构建通知,并在索引膨胀或召回率漂移成为问题时安排 REINDEX。
注意事项
- 版本
0.8.6修复了 32 位系统上的 IVFFlat 构建溢出、将数组转换为sparsevec时未强制执行非零元素上限,以及嵌套循环中的 IVFFlat 扫描内存增长问题。它没有新增 SQL 功能界面。安装新的扩展文件后,如果数据库报告的是较旧 SQL 版本,请运行ALTER EXTENSION vector UPDATE。 - 使用与查询操作符匹配的操作符类。余弦索引无法加速 L2
ORDER BY。 - 近似索引以精确召回率换取速度。请使用有代表性的数据和查询过滤条件验证召回率。
- 应在数据加载后构建 IVFFlat。如果数据分布发生显著变化,请重建索引。
- 在高强度写入和 vacuum 活动场景中使用 HNSW 时,请及时更新 pgvector;
0.8.x系列包含重要的 HNSW 维护修复。