pgvectorのHNSWで「フィルタをかけると結果が減る」「インデックスが重い」と困っていませんか?
タイトル: Introducing pg_pinecone: Open-Source Search for Your Postgres Data
URL:
🐘 概要
Apache 2.0のオープンソースPostgres拡張です。既存のpgvectorのベクトル列に、Pineconeの検索エンジンによるベクトル検索を足せます。データベース内で動くので、データはPostgresの外に出ません。
❓ 解決する課題
HNSWはデータ増でメモリと構築時間が膨らみ、テナント単位などのフィルタ付き検索では、要求件数より少ない結果になることがあります。
🧩 方法論と提案手法
グラフの代わりに、IVFとRaBitQ(約1ビット/次元)のコードを使い、近いクラスタ探索、コードで距離推定、完全ベクトルで再ランクの3段階で検索します。フィルタは全行の3%以下ならプレフィルタで厳密に、それ以上なら各クラスタ内で確認します。APIキーなしのnativeエンジンのほか、remote、embed()、BM25、rerank()も選べます。
📊 実験結果(ベンダー報告)
100万ベクトル・768次元で、
・再現率0.95のレイテンシ 1.27 ms(HNSW halfvecは1.71 ms)
・インデックスサイズ 136 MB(HNSW halfvecは2.0 GB)
・1%フィルタ:再現率0.981を8.3 ms(HNSW halfvecは0.924を56 ms)
ただし1データセット、1構成の結果で、一括ロード後はREINDEXが必要です。
#
Postgres# #
VectorSearch#