id 로 upsert
재-ingest 할 때 collection.upsert() 사용. id 있으면 update, 없으면 insert. 이게 idempotent ingest 파이프라인과 두 번째 실행에서 폭발하는 파이프라인의 차이야.
tombstone 으로 soft-delete, id 로 hard-delete
audit-friendly 시스템은 삭제된 청크에 metadata {'deleted': True} 마크 + query 시점에 제외. 프로덕션 cleanup 에는 collection.delete(ids=[...]) 로 물리적 제거.
Re-embedding 전략
임베딩 모델 전환은 모든 벡터 재빌드 필요. 두 패턴:
- side-by-side collection.
docs-bge-m3-v1옆에docs-bge-m3-v2빌드. 준비되면 read pointer 전환. 일주일 뒤 v1 삭제. - in-place 재빌드. id 순회, 재임베딩, upsert. 작은 collection 에서는 OK; 큰 거에서는 위험 — 재빌드 중 query consistency 잃음.
항상 side-by-side 선호. rollback path 가 그냥 "v1 가리키게 되돌려놓기".