DX推進のあなたは、社内規程と製品マニュアル約4,000ファイルを読ませて、問い合わせに答える仕組みを試しています。試作は動きました。しかし「出張旅費の上限は?」と聞くと、去年廃止した規程を根拠に答えが返ってきます。エンジニアは「Pineconeに替えれば精度が上がる」と言います。情シスは「社外のサービスに規程を置くのか」と眉をひそめます。PostgreSQLの担当者は「pgvectorで十分」と言い、経営からは「本番にしたら月いくらかかるのか」と聞かれています。

文書を意味の近さで探して、生成AIに渡してから答えさせる仕組みをRAG(検索拡張生成)と呼びます。その検索を受け持つのがベクトルDBです。ベクトルDBの選び方は、性能比べから入ると迷います。先に決めるのは「データをどこに置いてよいか」と「誰が運用するか」の2つです。この2つが決まれば、候補はほぼ1つに絞れます。

置き場所と運用者で、候補はほぼ決まる

状況第一候補これを選ぶと後で困ること
PostgreSQLを既に運用していて、文書は数百万件までの見込みpgvector検索の調整(インデックスの設定、絞り込み時の件数不足)を自分たちで持つ
社内に運用者がいない。データを社外のクラウドサービスに置いてよいPinecone無料のStarterプランはAWSのus-east-1だけ。使った量に応じて費用が増え、他のDBへの移行に手間がかかる
自社のクラウド環境やKubernetesの中に置きたい。キーワードと意味の両方で探したいWeaviate(自社運用)バックアップ、監視、版上げを自社で持つ
文書や表がSnowflakeやBigQueryに既に入っているDWHの検索機能(Snowflake Cortex Search、BigQueryのVECTOR_SEARCH)DWHの外のアプリから使うと、問い合わせ料金や応答の速さを別に確かめる必要がある
まだ試作段階で、どれを選ぶか決められない既存の環境で一番手早く動くもの本番の要件(置き場所・権限・更新)を決めないまま規模だけ大きくなる

冒頭の「廃止した規程で答える」問題は、どのDBを選んでも起こります。原因はDBの性能ではなく、更新と削除の運用にあります。この点は後半で扱います。

回答の質は、DBより前後の工程で決まる

精度が出ないとき、DBを替える前に確かめたいことがあります。

症状よくある原因手当て
規程の条文の途中で切れた断片が返ってくる文書の分割(チャンキング)が文字数だけで機械的に切っている見出しや条ごとに分ける。断片に文書名と見出しを付けて埋め込む
型番や規程番号で聞くと外れる意味の近さだけで探していて、文字の一致を見ていないキーワード検索と組み合わせる(ハイブリッド検索)
上位の結果は近いが、答えに必要な断片が5位以下に沈む検索した順のまま生成AIに渡している多めに取ってから、並べ替え用のモデルで順位を付け直す(リランク)
廃止した規程や古い版を根拠に答える元の文書を消しても、ベクトルが残っている元データの削除・更新をベクトルDBへ反映する仕組みを作る

埋め込みモデル(文書をベクトルに変えるモデル)を替える場合は、どのDBでも全文書を埋め込み直します。モデルが違えばベクトルどうしを比べられないからです。OpenAIの text-embedding-3-small は1,536次元、text-embedding-3-large は3,072次元のベクトルを返します。後で出てくる次元数の上限と合わせて、モデルは早めに決めておきます。

pgvector:既存のPostgreSQLで始める

pgvectorはPostgreSQLにベクトルの型と検索を足す拡張です。2026年10月時点の最新版は0.8.7です。普段のSQLに混ぜて書けるので、部署や公開範囲での絞り込みも、権限の仕組みもPostgreSQLのものをそのまま使えます。

CREATE EXTENSION vector;

CREATE TABLE doc_chunks (
  id         bigserial PRIMARY KEY,
  doc_id     bigint NOT NULL,
  department text,
  body       text,
  embedding  vector(1536)
);

-- 初回の大量投入のあとでインデックスを作るほうが速い
CREATE INDEX ON doc_chunks USING hnsw (embedding vector_cosine_ops);

-- 部署で絞り込んで、意味の近い順に5件
SELECT id, body
FROM doc_chunks
WHERE department = '総務'
ORDER BY embedding <=> '[0.01, -0.02, ...]'
LIMIT 5;

<=> はコサイン距離、<-> はL2距離、<#> は内積(符号が逆)、<+> はL1距離です。

運用で詰まりやすい点が2つあります。1つ目は次元数の上限です。インデックスを張れるのは vector 型で2,000次元まで、halfvec 型で4,000次元までです。3,072次元のモデルを使うなら halfvec を使うか、埋め込みの次元数を減らす指定をします。

2つ目は、絞り込みと組み合わせたときの件数不足です。HNSWなどの近似インデックスでは、絞り込みはインデックスを走査したあとにかかります。公式の説明では、条件に合う行が全体の10%で、hnsw.ef_search が既定の40なら、返ってくるのは平均4件です。5件ほしいのに3件しか返らない、という現象はこれが原因です。0.8.0以降は反復スキャンを有効にすれば、足りない分を追加で探しに行きます。

SET hnsw.iterative_scan = strict_order;  -- 0.8.0以降
SET hnsw.ef_search = 100;               -- 既定は40。上げると取りこぼしが減り、遅くなる

マネージドのPostgreSQLでは、使えるpgvectorの版をサービス側が決めています。反復スキャンを使う前に、自社のサービスで0.8.0以降が使えるかを確かめます。

Pinecone:運用を持たずに始める

Pineconeはフルマネージドのベクトルデータベースです。サーバーの台数や容量を自分で決める必要はありません。旧来のポッド型インデックスはレガシー扱いになり、2025年8月以降の新規顧客は作れません。これから始めるならサーバーレス型を前提にします。

プラン月額主な上限
Starter無料ストレージ2GB、書き込み月200万ユニット、読み取り月100万ユニット、インデックス5つ、リージョンはAWSのus-east-1だけ
Builder定額20ドルストレージ10GB、書き込み月500万ユニット、読み取り月200万ユニット
Standard最低50ドル(従量)ストレージ1GBあたり月0.33ドル、読み取り100万ユニットあたり16〜18ドル
Enterprise最低500ドル(従量)読み取り100万ユニットあたり24〜27ドル

料金は2026年10月17日に公式の料金ページで確かめたものです。変わることがあるので、見積もりの前に必ず確かめ直します。

情シスとの話で先に出るのは置き場所です。無料プランで試作したデータはus-east-1に置かれます。国内に置く必要がある文書なら、試作の段階から有料プランにして、使いたいリージョンを選べるかを確かめます。部署や顧客ごとにデータを分けたいときは、インデックスの中を区切る名前空間を使います。1つのインデックスに作れる数はStarterで100、Standardで100,000です。

Weaviate:自社環境に置き、キーワードと意味の両方で探す

WeaviateはOSSで提供されるベクトルDBで、自社運用とWeaviate Cloudの両方を選べます。キーワード検索とベクトル検索の結果を混ぜるハイブリッド検索が標準で使え、規程番号や型番を含む質問に強くなります。alpha が1なら意味だけ、0ならキーワードだけで探します。

import weaviate
from weaviate.classes.config import Configure, Property, DataType

client = weaviate.connect_to_local()
client.collections.create(
    "Regulation",
    vector_config=Configure.Vectors.text2vec_openai(),  # 投入時に自動で埋め込む
    properties=[
        Property(name="title", data_type=DataType.TEXT),
        Property(name="body", data_type=DataType.TEXT),
    ],
)
regs = client.collections.use("Regulation")
res = regs.query.hybrid(query="出張旅費 上限 規程第12条", alpha=0.5, limit=5)

自社で運用するなら、バックアップの設計を最初に決めます。本番で使えるバックアップ先はS3(互換ストレージを含む)、Google Cloud Storage、Azure Storageです。ローカルのファイルシステムは単一ノードの開発用に限られます。復元先は、ノードの名前と数を元の環境と揃える必要があります。障害に備えて別のクラスタへ戻す計画なら、ノード構成から揃えておきます。

利用者や部署ごとにデータを分けるマルチテナンシーでは、テナントごとに別のシャードへ保存されます。使っていないテナントは INACTIVE(ディスクに置いたまま使えない状態)や OFFLOADED(クラウドストレージへ退避)にできます。Weaviate Cloudの料金はFreeプランと、月45ドルからのFlexプランがあります(2026年10月17日時点)。法務がライセンスを確認する場合、リポジトリにはBSD-3-Clauseと独自のWeaviate Licenseが混在するので、LICENSEファイルの説明を見てもらいます。

データがDWHにあるなら、DWHの検索機能で足りるかを先に確かめる

検索したい文書や表が既にSnowflakeやBigQueryにあるなら、ベクトルDBを別に立てる前に、DWHの機能を試します。データを外へ出さずに済むので、情シスとの調整が一番軽くなります。

DWH使う機能確かめておくこと
SnowflakeCortex Search(埋め込みとインデックスの更新をSnowflakeが受け持つ)、VECTOR型(最大4,096次元)更新の遅れを TARGET_LAG で決める。利用リージョンで機能が使えるか
BigQueryVECTOR_SEARCH(インデックスは任意。無ければ全件を比べる)検索のたびにかかる問い合わせ料金。インデックスの保存料金

本番に上げる前に決めておく3つの運用

冒頭の「廃止した規程で答える」問題は、ここで防ぎます。

決めること具体的な決め方
削除と更新の反映元の文書管理から、削除と改版を1日1回以上ベクトルDBへ反映する。文書IDをキーに、古い断片を消してから新しい断片を入れる
見てよい範囲断片ごとに部署や公開範囲を持たせ、検索のたびに絞り込む。生成AIに渡したあとでは隠せない
埋め込みのやり直しモデルを替えるときの全件埋め込み直しの手順と、旧ベクトルとの並行期間を決める

元のデータベースの変更を拾って流す方法はCDC(変更データキャプチャ)の選び方に、取り込みの道具はデータ取り込みツールの選び方に、モデルの運用全体はMLOpsの選び方にまとめています。

よくある質問(FAQ)

ベクトルDBは、本当に新しく立てる必要がありますか?

必ずしも要りません。PostgreSQLを運用しているならpgvector、データがSnowflakeやBigQueryにあるならDWHの検索機能で始められます。新しく立てるのは、運用者がいなくてマネージドに任せたいときか、自社環境でハイブリッド検索やテナント分離を細かく設計したいときです。

pgvectorは、何件くらいまで使えますか?

件数だけでは決まりません。サーバーのメモリ、次元数、インデックスの設定、絞り込みの条件で変わるからです。公式の手引きでは、HNSWのインデックスは作成時にグラフが maintenance_work_mem に収まると速く作れるとされています。自社の文書数の2〜3倍のデータで、応答時間と取りこぼしを測ってから決めます。

精度が出ないのは、ベクトルDBのせいですか?

多くはDBの手前と後ろに原因があります。文書の分け方、埋め込みモデル、キーワード検索との組み合わせ、並べ替えの4つを先に見直します。DBを替えても、渡す断片の切り方が同じなら、答えの根拠も同じところに偏りがちです。

社外のサービスに社内文書を置いてもよいですか?

社内の情報管理の規程で決まります。Pineconeの無料プランはAWSのus-east-1だけなので、国内に置く必要がある文書は試作でも入れられません。有料プランでのリージョン選択、またはpgvectorやWeaviateの自社運用を検討します。

埋め込みモデルを替えるときは、何をすればよいですか?

全文書を新しいモデルで埋め込み直します。モデルが違うとベクトルを比べられないからです。Weaviateは1つのコレクションに名前付きベクトルを後から足せますが、既存の文書は自動で埋め込み直されません。旧ベクトルで検索を続けながら新しいベクトルを入れていき、切り替えたら旧ベクトルを消します。

出典

  • pgvector GitHub README(2026-10-17 参照:演算子、インデックス可能な次元(vector 2,000/halfvec 4,000)、HNSW既定m=16・ef_construction=64・ef_search=40、絞り込みは走査後(10%で平均4件)、0.8.0の反復スキャン、初回投入後にインデックス、maintenance_work_mem)
  • pgvector CHANGELOG(2026-10-17 参照:最新0.8.7(2026-10-01))
  • Pinecone Pricing(2026-10-17 参照:Starter/Builder/Standard/Enterpriseの月額・上限・単価、Starterはus-east-1のみ(2026-10-17参照))
  • Pinecone Docs Understanding pod-based indexes(2026-10-17 参照:ポッド型はレガシー、2025年8月以降の新規顧客は作成不可)
  • Pinecone Docs Object limits(2026-10-17 参照:プラン別の名前空間上限(Starter 100、Standard 100,000))
  • Pinecone Docs Create an index(2026-10-17 参照:インデックスの種類、作成時にdimensionとmetricを指定)
  • Weaviate Docs Hybrid search(2026-10-17 参照:alphaの意味(1=ベクトル、0=キーワード)、v1.24からRelative Score Fusionが既定、collections.useとquery.hybrid)
  • Weaviate Docs Vector configuration(2026-10-17 参照:Configure.Vectors.text2vec_openai、名前付きベクトルをv1.31から追加可能だが既存は再ベクトル化されない)
  • Weaviate Docs Backups(2026-10-17 参照:S3/GCS/Azure、ファイルシステムは単一ノードのみ、復元はノード名・数を一致)
  • Weaviate Docs Multi-tenancy(2026-10-17 参照:テナントごとにシャード、ACTIVE/INACTIVE/OFFLOADED)
  • Weaviate Pricing(2026-10-17 参照:Free、Flex月45ドルから(2026-10-17参照))
  • Weaviate LICENSE(2026-10-17 参照:BSD-3-Clauseと独自Weaviate Licenseの混在)
  • OpenAI Embeddings guide(2026-10-17 参照:text-embedding-3-smallは1,536次元、-largeは3,072次元、dimensionsで短縮可)
  • Snowflake Docs Vector data types(2026-10-17 参照:VECTOR型最大4,096次元)
  • Snowflake Docs Cortex Search(2026-10-17 参照:埋め込みとインデックス更新をSnowflakeが管理、TARGET_LAG)
  • Google Cloud BigQuery Vector search intro(2026-10-17 参照:VECTOR_SEARCH、インデックスは任意(無ければ総当たり)、料金の考え方)

「廃止した規程で答えてしまう」RAGの試作を本番に上げる前に、文書の更新と削除をどう反映するかから一緒に整理できます。初回相談(30分・無料)で一緒に整理できます。