0Pricing
SQL Academy · レッスン

pgvectorによるベクトル検索

pgvector拡張で埋め込みを保存し、ivfflat / HNSWによる近似最近傍検索を実行します。

「pgvectorによるベクトル検索」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。

ベクトルは何に使うのか

埋め込みは意味をベクトルとして表現します。同じトピックについて書かれた2つのドキュメントは、似たベクトルになります。ベクトル検索は、セマンティック検索、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には次の3つがあります。

  • <-> — ユークリッド距離(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によるベクトル検索」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。

「pgvectorによるベクトル検索」で何を学びますか?

pgvector拡張で埋め込みを保存し、ivfflat / HNSWによる近似最近傍検索を実行します。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応の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に戻る