AIモデルとプラットフォーム
Pinecone、オープンソースのPostgres検索拡張機能「pg_pinecone」をリリース

Pineconeは2026年10月27日、Apache 2.0ライセンスのオープンソースPostgres拡張機能「pg_pinecone」をリリースした。同社によると、同社が大規模環境で運用しているベクトル検索エンジンを、アプリケーションがすでに保存しているpgvectorの列で利用できるようにする。会社が公表したベンチマークでは、768次元のベクトル100万件を対象とした場合、この拡張機能のネイティブインデックスのサイズは136 MBだった。これに対し、HNSWはhalfvecで2.0 GB、フルサイズのベクトルで4.1 GBだった。
このリリースは、Harshita Daddala氏とAnthony Mahanna氏が執筆した発表記事で紹介された。同記事によると、Postgresでベクトル検索を実行する一般的な方法は、HNSWのようなグラフインデックスを使うことだ。この方式では、性能を維持するために必要なメモリが増え続け、構築にも長い時間がかかるうえ、フィルターを適用した検索では精度が低下する。また、クエリの対象を1人のユーザーや1つのテナントに絞ると、グラフインデックスから返される行数がクエリのLIMITで指定した数を下回ることがある。これに対しpg_pineconeは、検索中にフィルターを適用するため、対象を狭く絞っても結果を指定数まで返せるとPineconeは説明している。また、デフォルトのエンジンではデータがPostgresの外に出ることはない。
1つのインデックスを支える3つのエンジン
pg_pineconeは、pgvectorにすでに格納されているベクトル列を利用する。アプリケーションは従来と同じ方法でPostgresに接続し、ORDER BY embedding <=> $1 LIMIT 10のような同じSQLを送信できる。フルサイズのベクトルを含むテーブルはそのままの場所に保持され、Postgresが引き続き信頼できる唯一のデータソースとなる。
各テーブルでは、3つのエンジンのうち1つを使用する。デフォルトのネイティブエンジンは、PineconeのアカウントやAPIキー、ネットワーク通信を必要とせず、インデックスの構築と検索をすべてPostgres内で行う。pgvectorエンジンは、既存のpgvectorインデックス(HNSWまたはIVFFlat)を使って検索する。プロジェクトのGitHubリポジトリでは、pgvectorインデックスがすでにあり、フィルターを使用しないテーブルに適していると説明されている。リモートエンジンは、Pineconeのマネージドサービスにあるサーバーレスインデックスに検索を送信するもので、1台のPostgresサーバーでは対応しきれなくなったテーブルを対象としている。テーブルのエンジンはpinecone.set_engine()を1回呼び出すだけで切り替えられ、クエリを変更する必要はなく、切り替えはいつでも元に戻せる。
ネイティブエンジンの検索方法
pgvectorのHNSWと同様に、ネイティブエンジンも近似最近傍探索アルゴリズムを使用するが、グラフの代わりに反転ファイルインデックスを採用し、類似するベクトルをクラスタにまとめる。各ベクトルは量子化されたRaBitQコードとして保存され、1次元あたり約1ビットに加え、少数の補正値を使用する。この方式について、発表記事はGao氏とLong氏によるSIGMOD 2024の研究を挙げている。各クラスタのコードはまとめて格納されるため、検索時にはグラフ内を飛び回る代わりに、連続した数ページを読み込めばよい。
検索は3つの手順で行われる。まず、クエリベクトルと各クラスタの重心を比較して、近傍のクラスタを選ぶ。次に、各行のRaBitQコードから推定距離を計算し、有力な候補を絞り込む。最後に、テーブル内のフルサイズのベクトルを使って候補を再順位付けする。
フィルタリングは検索処理の中で行われる。Pineconeによると、pgvectorのHNSWは後処理でフィルターを適用する。つまり、先に近傍を見つけてからWHERE句を適用するため、条件を狭く絞ると候補の大半が除外される。その後、反復スキャンで候補リストを補充するが、時間がかかり、relaxed_orderを使用する場合は精度も犠牲になる。ネイティブエンジンは、各行のコードの隣にフィルター列の値を保存し、構築時に値ごとの行数を数える。条件を狭く絞る場合(デフォルトでは全行の3%以下)は、事前にフィルターを適用し、すべてのクラスタにわたって該当する行をすべて走査する。各行をフルサイズのベクトルで評価するため、結果は正確になる。条件が広い場合は1段階のフィルタリングを使い、近傍クラスタの最大半数を検索して、各クラスタ内でスコアを計算する前にフィルターを確認する。
新たに挿入されたデータは最も近いクラスタに追加され、すぐに検索できる。重心はインデックス構築時に配置されたまま変わらないため、テーブルを2倍にする一括ロードなど、大規模な変更の後はREINDEXを実行するか、自動メンテナンスを有効にしてクラスタのバランスを取り直すよう、発表記事は推奨している。
Pineconeが公表したベンチマーク
Pineconeは、768次元のwiki_dprベクトル100万件を使い、フルサイズのベクトルとhalfvecのそれぞれについて、ネイティブエンジンとpgvectorのHNSWインデックスを比較した。テストは、vCPU 16基、メモリ128 GBを搭載したAWS r6id.4xlargeインスタンスで実施された。フィルターなしの検索レイテンシ、構築時間、インデックスサイズはPostgreSQL 17上の1つ目のセッションで測定し、フィルター付き検索はPostgreSQL 18上の別のセッションで、メモリ上限を設けた構成はさらに別のセッションで測定した。レイテンシは、クライアント1台、k=10での中央値(p50)として報告されている。また同社によると、テスト環境一式と再実行用コマンドは、リポジトリ内のベンチマーク用ハーネスのREADMEに記載されている。
ベクトル100万件の場合、Pineconeが報告したネイティブインデックスのサイズは136 MBで、HNSWはhalfvecで2.0 GB、フルサイズのベクトルで4.1 GBだった。フィルターなしの検索では、同社によると、再現率0.95の場合のレイテンシは1.3 msで、HNSWのhalfvecでは1.7 ms、フルサイズのベクトルでは2.7 msだった。再現率0.99の場合は2.3 msで、HNSWではそれぞれ4.7 msと6.7 msだった。行の10%に一致するフィルターを使った場合、ネイティブエンジンは1段階のフィルタリングにより、12.3 msで再現率1.000に達したとPineconeは報告している。一方、反復スキャンを使ったHNSWは、最良でも5.9 msで再現率0.920だった。フィルターが1%に一致する場合については、再現率0.981、レイテンシ8.3 msと報告された。構築時間は、ネイティブエンジンが45秒、HNSWはhalfvecで62秒、フルサイズのベクトルで79秒だった。
利用可能時期と任意で利用できるPineconeの機能
pg_pineconeを利用するには、PostgreSQL 17または18、スーパーユーザー権限、サーバーへのpgvectorのインストールが必要です。GitHubで公開されているビルド済みリリースからインストールするか、Docker Hubのpineconeteam/pg_pineconeイメージを使用できます。READMEによると、このイメージはpgvector/pgvectorイメージにpg_pineconeを追加したもので、0.11.0-pg17のようにPostgreSQLのメジャーバージョンごとにタグが公開されています。リモートエンジンを実行するには、shared_preload_librariesを通じて拡張機能を読み込む必要もあります。セットアップではvector拡張機能とpg_pinecone拡張機能を作成し、pinecone.create_index()を呼び出してインデックスを構築します。また、Rustのツールチェーンとcargo-pgrx 0.19.2を使って、ソースからプロジェクトをビルドすることもできます。
オプションのPinecone APIキーを設定すると、リモートエンジンはバックグラウンドで埋め込みをPineconeのインデックスに同期します。コピーが完了するまでは、検索をPostgres上で継続できます。記事では、さらに3つのオプション機能が紹介されています。embed()を呼び出すと、Pineconeの推論サービスを使ってSQLからテキストを埋め込みに変換できます。この機能はネイティブエンジンとリモートエンジンの両方で利用でき、初回のビルドではPineconeの無料枠が適用されます。BM25全文検索は、同じテーブル上でベクトル検索と並行して実行でき、BM25検索、ベクトル検索、またはハイブリッド検索のクエリをSQLから発行できます。また、rerank()を使うと、Pineconeの再ランキングモデルによって上位の検索結果を並べ替えられます。
docs.pinecone.ioのドキュメントでは、インストール方法、ストレージエンジン、エンジンの切り替え、全文検索について説明しています。また、リポジトリにはSQLリファレンス、運用担当者向けの手順書、災害復旧ガイドが用意されています。Pineconeは、今回がプロジェクトの初回リリースであると説明し、pg_pineconeの保守とすべてのプルリクエストのレビューを担うと述べました。また、GitHubのイシュー、Discordコミュニティ、毎月のオフィスアワーで寄せられたフィードバックをもとに、公開ロードマップを策定していくとしています。












