Three things change over time
- Embedding model — provider releases v3, you want to upgrade
- Chunking strategy — you change splitter or chunk size
- Metadata schema — you add a tenant_id or a permission level
All three require a re-ingest. The question is how to do it without a maintenance window.
The version-suffix discipline
Encode the version in the collection (or table) name: docs-bge-m3-v3, chats-openai-large-2026q2. The application keeps a config pointer. Migrations are: build the new collection in parallel, validate, flip the pointer, drop the old one a week later. The rollback is one config change.
Query-time fallback
During the migration window, query both old and new collections, return whichever has more results above the score floor. This catches the case where the new model is worse on a subset of queries before you fully cut over.