pgvector は、ApsaraDB RDS for PostgreSQL にベクトルストレージおよび類似検索機能を追加します。機械学習モデルによって生成された埋め込み(embedding)を格納し、コサイン距離、ユークリッド距離、または内積に基づいてクエリを実行できます。
仕組み
埋め込み(embedding) とは、テキスト、画像、音声、動画などのデータを数値化した表現であり、高次元空間内のベクトルとして表されます。意味的に類似したオブジェクトは、互いに近接したベクトルとしてマッピングされます。
たとえば、リンゴを [1, 1]、バナナを [1.2, 0.8]、猫を [6, 0.4] で表す場合、ベクトル検索では、果物という共通の性質を持つため、バナナがリンゴに対して最も類似していると評価されます。

pgvector は以下の機能をサポートしています。
正確な最近傍検索(exact nearest neighbor)および近似最近傍検索(approximate nearest neighbor: ANN)
高速な ANN 検索を実現する階層型ナビゲーブル・スモールワールド(HNSW)インデックスおよび IVFFLAT 並列インデックス
最大 16,000 ディメンションのベクトルをサポート。インデックス対応可能なベクトルは最大 2,000 ディメンションまで
距離メトリック:L2(ユークリッド)距離、コサイン類似度、内積
その他の演算:L1 距離、要素ごとの乗算、集約和
前提条件
開始する前に、以下の点をご確認ください。
RDS インスタンスが PostgreSQL 14 以降を実行しており、マイナーエンジンバージョンが 20230430 以降であること。PostgreSQL 17 の場合は、マイナーエンジンバージョンが 20241030 以降である必要があります。
RDS インスタンスに対して特権アカウントが存在すること。
メジャーエンジンバージョンのアップグレードについては、「ApsaraDB RDS for PostgreSQL インスタンスのメジャーエンジンバージョンをアップグレードする」をご参照ください。マイナーエンジンバージョンの更新については、「ApsaraDB RDS for PostgreSQL インスタンスのマイナーエンジンバージョンを更新する」をご参照ください。特権アカウントの作成については、「アカウントの作成」をご参照ください。
拡張機能のインストール
コンソールからインストール(推奨)
インスタンス ページに移動します。上部のナビゲーションバーから、ご利用の RDS インスタンスが配置されているリージョンを選択し、インスタンス ID をクリックします。
左側のナビゲーションウィンドウで、プラグイン をクリックします。
[拡張マーケットプレイス] タブで、ベクター拡張を見つけ、[インストール] をクリックします。または、[拡張の管理] タブに切り替え、ベクター拡張を検索し、[操作] 列の [インストール] をクリックします。

ダイアログボックスで、データベース名 および データベースアカウント を設定し、インストール をクリックします。
拡張は、インスタンスステータスが [インスタンスのメンテナンス中] から [実行中] に変化したときにインストールされます。
拡張機能の更新またはアンインストール:
拡張機能管理 タブの インストール済みの拡張機能 一覧から該当の拡張機能を見つけ、操作 列の バージョンをアップグレード または アンインストール をクリックします。
バージョンをアップグレード が表示されない場合は、拡張機能が既に最新バージョンです。
SQL を使用したインストール
これらの操作には特権アカウントが必要です。アカウントの作成については、「アカウントの作成」をご参照ください。
-- 作成
CREATE EXTENSION IF NOT EXISTS vector;
-- 更新
ALTER EXTENSION vector UPDATE [ TO new_version ];
-- 削除
DROP EXTENSION vector;new_version は pgvector 拡張機能の対象バージョンです。バージョン履歴および特徴については、pgvector ドキュメント をご参照ください。ベクトルの格納とクエリ実行
このセクションでは、埋め込みの格納および類似検索の実行手順について説明します。完全な API リファレンスについては、pgvector ドキュメント をご参照ください。
テーブルの作成
CREATE TABLE items (
id bigserial PRIMARY KEY,
item text,
embedding vector(2)
);この例では説明のため 2 ディメンションのベクトルを使用しています。pgvector は最大 16,000 ディメンションをサポートします。
ベクトルの挿入
INSERT INTO items (item, embedding)
VALUES
('Apple', '[1,1]'),
('Banana', '[1.2,0.8]'),
('Cat', '[6,0.4]');類似度によるクエリ実行
距離演算子を使用して、類似度に基づき結果をランク付けします。距離が短いほど、対象間の類似度は高くなります。
距離演算子:
| 演算子 | メトリック |
|---|---|
<-> | L2(ユークリッド)距離 |
<=> | コサイン距離 |
<#> | 内積 |
基本的な類似検索クエリ:
-- バナナに最も類似するアイテムをコサイン距離でランク付けして検索
SELECT item,
embedding <=> '[1.2, 0.8]' AS cosine_distance
FROM items
ORDER BY cosine_distance;サンプル出力:
item | cosine_distance
--------+------------------------
Banana | 0
Apple | 0.019419362524530137
Cat | 0.13289443670962842距離が
0は完全に一致することを示します。距離が
0.019は高い類似度を示します。距離が
0.133は低い類似度を示します。
ビジネス要件に応じて類似度のしきい値を指定することで、類似度が低い結果を除外できます。
インデックスの作成
インデックスがない場合、pgvector は全表スキャンを実行して正確な検索を行います。大規模なデータセットでは、ANN 検索の高速化のためにベクトルインデックスを作成してください。
HNSW インデックスの作成
CREATE INDEX ON items USING hnsw (embedding vector_cosine_ops)
WITH (m = 16, ef_construction = 64);パラメーター:
| パラメーター | 説明 |
|---|---|
m | 各レイヤーにおけるノードあたりの最大接続数。値を大きくするとグラフの密度および取得率が向上しますが、インデックスの作成およびクエリ実行にかかる時間が長くなります。 |
ef_construction | インデックス構築時のサンプル候補セットのサイズ。値を大きくすると取得率が向上しますが、インデックスの作成およびクエリ実行にかかる時間が長くなります。 |
アクセスメソッド(`vector_cosine_ops` フィールド):
| 値 | 距離メトリック |
|---|---|
vector_cosine_ops | コサイン距離 |
vector_l2_ops | L2(ユークリッド)距離 |
vector_ip_ops | 内積 |
IVF インデックスの作成
CREATE INDEX ON items USING ivfflat (embedding vector_cosine_ops)
WITH (lists = 100);パラメーター:
| パラメーター | 説明 |
|---|---|
lists | データセットを分割するリスト数。リスト数を増やすと検索速度が向上しますが、取得率が低下する可能性があります。lists > 2000 の場合、「ERROR: memory required is xxx MB, maintenance_work_mem is xxx MB」というエラーが発生することがあります。この場合は、maintenance_work_mem を増加させて解決してください。「インスタンスパラメーターの設定」をご参照ください。 |
ivfflat.probes | クエリ実行時にスキャンするリスト数。値を大きくすると取得率が向上しますが、検索速度が低下します。 |
ivfflat.probes は、セッションレベルまたはトランザクションレベルで設定できます。
-- セッションレベル
SET ivfflat.probes = 10;
-- トランザクションレベル
BEGIN;
SET LOCAL ivfflat.probes = 10;
SELECT ...;
COMMIT;ivfflat.probes の値がインデックス作成時に指定した lists の値と等しい場合、インデックスは無視され、代わりに全表スキャンが実行されます。これにより、検索パフォーマンスが大幅に劣化する可能性があります。
データセットおよび必要な取得率に応じて、ivfflat.probes と lists の両方を調整してください。
パフォーマンスデータ
HNSW インデックスおよび IVF インデックスに関するベンチマークデータについては、以下をご参照ください。
次のステップ
pgvector を基盤として本番向け AI アプリケーションを構築します。