ベクトルの更新(update)
| 目的 | ポイント | 典型的なコード例(Python SDK) |
|---|---|---|
| 既存レコードの一部だけ書き換える | ・update() は ID が存在するかを検証せず、見付からなくても 200 OK を返す(サイレント)・値を全⾯置換したい場合は upsert() を使用 |
― |
1.1 密ベクトル値を差し替える
ベクトル次元は元と同じである必要があります。
1.2 疎ベクトル値を差し替える
indices と values のペアで追加または上書きを行います。
1.3 メタデータのみ更新する
未指定のキーはそのまま残り、指定したキーは追加または上書きされます。
1.4 ベクトル値とメタデータを同時に更新
values と set_metadata を同時指定すると原子的に処理されます。
課⾦モデル
更新は「書き込みユニット」に計上されるため、大量更新ではコストが増えます。広範囲に変更がある場合は 削除+再 upsert や新規 namespace への再投入を検討してください。
ベクトルの削除(delete)
| 方法 | 特徴 | 典型的なコード例(Python SDK) |
|---|---|---|
| ID 指定 | 最も効率的。ID が分かるピンポイント削除に推奨 | index.delete(ids=["id-1", "id-2"], namespace="example") |
| メタデータ filter 指定 | 条件に合うレコードを一括削除。filter 構文は検索と同じ | index.delete(filter={"genre": {"$eq": "documentary"}}, namespace="example") |
| namespace 内全削除 | delete_all=True を指定すると namespace 内を空にするが、namespace 自体は残る |
index.delete(delete_all=True, namespace="example") |
2.1 namespace/index の丸ごと削除
-
namespace 削除:
Delete a namespaceエンドポイントを使用。 -
index 削除:
Delete indexで全データ+設定を同時に廃棄。再作成にはcreate_index()が必要。
2.2 一貫性と可視性
Pinecone は イベントチュアル・コンシステンシー です。削除・更新直後はクエリに古いベクトルが短時間残る場合があります。describe_index_stats() で dataFreshness を確認し、処理完了を待つのが確実です。docs.pinecone.io
注意点
削除は元に戻せません。誤削除対策として、
元ベクトルIDを別ストレージにバックアップ
大胆な削除はまずステージング環境で検証
を推奨します。
運用上のベストプラクティスまとめ
| シナリオ | 推奨手順 |
|---|---|
| 一部メタデータを付け替える | update(set_metadata=…) で小規模変更 |
| 全文書の内容を差し替える | delete(ids=…) → 新内容を upsert() |
| 大量レコードの定期的なクレンジング | metadata filter で削除 or 新 namespace へ再投入し、旧 namespace を削除 |
| オンライン更新による整合性維持 | 更新/削除直後は検索結果に「残留」するため、API で dataFreshness を監視し完了後に本番トラフィックを切替 |
これで Pinecone におけるベクトルの更新・削除の要点と実装例を網羅しました。運用フェーズでは コスト・整合性・ロールバック手順 の 3 点を常に確認することが安定稼働の鍵となります。
ChatGPT4o 生成日:2025/06/20