mcpField
P
pgvector

pgvector

github.com/itechmeat数据与数据库2443 次安装4 天前更新
代码仓库

关于 pgvector

pgvector 是用于在 PostgreSQL 中存储向量并通过 SQL 搜索近邻的扩展,适合希望将向量查询与关系数据结合的开发者。它支持精确搜索,以及 HNSW、IVFFlat 等近似索引。

主要功能

  1. 01在 PostgreSQL 中存储向量类型
  2. 02精确与近似近邻搜索
  3. 03HNSW 和 IVFFlat 索引
  4. 04SQL 距离运算符
  5. 05客户端库参考资料

适用场景

  1. 01在关系记录旁查询嵌入向量
  2. 02权衡近似索引的速度与召回率
  3. 03通过 Python、Go、Node、Java 或 Swift 查询向量

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/itechmeat/llm-code --skill pgvector

安装后在 Claude Code 中输入/pgvector确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
core.md
go.md
indexing.md
installation.md
java.md
node.md
performance-and-filtering.md
python.md
swift.md
troubleshooting.md
types-and-functions.md

详细介绍

pgvector

用于在 PostgreSQL 中存储向量并通过 SQL 执行精确/近似最近邻搜索的扩展。

快速导航

  • 安装:references/installation.md
  • 核心概念和 SQL 配方:references/core.md
  • 索引(HNSW / IVFFlat)和调优:references/indexing.md
  • 过滤、迭代扫描和性能:references/performance-and-filtering.md
  • 类型和函数参考(vector/halfvec/bit/sparsevec):references/types-and-functions.md
  • 故障排查:references/troubleshooting.md
  • 客户端库(优先级):
    • Python:references/python.md
    • Go:references/go.md
    • Node(JS/TS):references/node.md
    • Java:references/java.md
    • Swift:references/swift.md

适用场景

  • 需要在 Postgres 中进行向量相似性搜索(将向量与关系型数据一同存储)。
  • 希望使用原生 SQL 的 ANN 索引(HNSW 或 IVFFlat),并能调节召回率/速度。
  • 希望在多种应用语言中使用一致的模式来存储/查询嵌入向量。

快速入门(已安装)

前提条件:Postgres 服务器上已安装 pgvector。请参阅:references/installation.md。

在数据库中启用并运行第一个查询:

CREATE EXTENSION vector;

CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));
INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]');

SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;
选择距离运算符
  • L2(欧几里得):使用 <->
  • 内积:使用 <#>(注意:返回的是负内积)
  • 余弦距离:使用 <=>
  • L1:使用 <+>
  • 二进制向量:汉明距离 <~> / Jaccard 距离 <%>
索引经验法则
  • 精确搜索:不使用 pgvector 索引;大型表可能使用并行扫描。
  • ANN 搜索:
    • 优先选择 HNSW,以获得更高的速度/召回率,但构建时间和内存开销更高。
    • 需要更快构建/更低内存开销时,使用 IVFFlat。
  • 每种计划使用的距离函数/运算符类都创建一个索引。

重要禁忌/注意事项

  • 近似索引可能会改变结果(召回率与速度之间的权衡)。
  • 通常需要使用 ORDER BY <distance-op> ... LIMIT ... 才能使用索引。
  • <#> 返回负内积;乘以 -1 可得到实际值。
  • NULL 向量不会被索引;对于余弦距离,零向量不会被索引。

链接

评论

支持 Markdown