0Pricing
SQL Academy · 课时

使用 pgvector 进行向量搜索

使用 pgvector 扩展存储嵌入向量,并通过 ivfflat / HNSW 执行近似最近邻搜索

使用 pgvector 进行向量搜索 是 CoddyKit 上的免费 SQL Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 SQL Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 SQL Academy 课程共包含 4 节课。

向量有什么用途?

嵌入向量能够编码语义。关于同一主题的两篇文档具有相似的向量。向量搜索支持语义搜索、RAG(检索增强生成)和推荐功能。

启用 pgvector

该扩展已广泛可用(RDS、Cloud SQL 和 Supabase 都已内置):

CREATE EXTENSION vector;

向量列

根据嵌入模型的维度定义列:

CREATE TABLE docs (
  id BIGSERIAL PRIMARY KEY,
  title TEXT NOT NULL,
  body TEXT NOT NULL,
  embedding vector(1536)
);

-- 1536 is OpenAI text-embedding-3-small dimension; varies by model.

插入嵌入向量

将向量作为数组字面量插入:

INSERT INTO docs (title, body, embedding)
VALUES ('SQL Course', 'Learn SQL', '[0.013, -0.024, ...]');

距离运算符

pgvector 提供三种运算符:

  • <-> — 欧几里得(L2)距离
  • <#> — 负内积
  • <=> — 余弦距离(嵌入向量最常用)

最近邻搜索

查找距离查询向量最近的文档:

SELECT id, title, 1 - (embedding <=> $1) AS similarity
FROM docs
ORDER BY embedding <=> $1
LIMIT 10;

IVFFlat 索引

对于大型数据集,请构建近似最近邻(ANN)索引:

CREATE INDEX docs_embedding_idx
  ON docs USING IVFFLAT (embedding vector_cosine_ops)
  WITH (lists = 100);

-- Tune lists by row count: rule of thumb sqrt(N).
-- Set probes per query for accuracy:
SET ivfflat.probes = 10;

HNSW 索引(PG 16+)

在许多情况下,它的召回率和延迟都优于 IVFFlat:

CREATE INDEX docs_embedding_hnsw
  ON docs USING HNSW (embedding vector_cosine_ops);

SET hnsw.ef_search = 100;

筛选后的向量搜索

组合向量筛选和结构化筛选:

SELECT id, title
FROM docs
WHERE language = 'en'
  AND created_at >= NOW() - INTERVAL '30 days'
ORDER BY embedding <=> $1
LIMIT 10;
-- For best perf, partial index on the filter.

RAG 模式

通过嵌入向量检索 N 个相关文档,并将其作为上下文提供给 LLM:

-- 1. Embed user query
-- 2. SELECT top-N docs by cosine
-- 3. Send docs + query to LLM
-- 4. Return LLM's answer to user

混合搜索

组合向量搜索和词法搜索(tsvector)以获得最佳结果——单独使用任何一种都无法覆盖所有内容:

SELECT id, title,
  0.6 * (1 - (embedding <=> $1)) + 0.4 * ts_rank(search_doc, $2) AS score
FROM docs
WHERE embedding <=> $1 < 0.7
   OR search_doc @@ $2
ORDER BY score DESC LIMIT 10;

维度选择

嵌入向量越大,准确度越高,但存储开销也越大、速度越慢。许多应用使用 384–768 维模型就能良好运行。请选择一个模型并保持一致。

回顾

pgvector 为 Postgres 添加了一流的向量搜索能力。

  • vector(N) 列类型
  • IVFFlat / HNSW 索引
  • 使用 <=> 计算嵌入向量的余弦距离
  • 与 FTS 混合使用以获得最佳召回率

快速检查

您正在使用 OpenAI 嵌入向量按语义相似度进行搜索。通常应该使用哪个 pgvector 距离运算符?

常见问题解答

「使用 pgvector 进行向量搜索」课时是免费的吗?

是的 — 「使用 pgvector 进行向量搜索」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 SQL Academy 课程的其余内容,请升级到 CoddyKit PRO。 SQL Academy 课程共包含 4 节课。

「使用 pgvector 进行向量搜索」这节课中我会学到什么?

使用 pgvector 扩展存储嵌入向量,并通过 ivfflat / HNSW 执行近似最近邻搜索 你通过在浏览器中直接运行的动手代码来练习 SQL Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 SQL Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 SQL Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「使用 pgvector 进行向量搜索」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 SQL Academy 课中编写并运行代码吗?

能。每节 SQL Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 三元组搜索(pg_trgm)与模糊匹配
  2. 使用 tsvector 和 GIN 进行全文搜索
  3. 使用 PostGIS 进行地理空间索引
  4. 使用 pgvector 进行向量搜索
← 返回 SQL Academy