Yes. One private search system can store and query embeddings from multiple models at the same time. The safe approach is to treat each embedding model as its own vector space with explicit dimensions, distance metric, version, and index configuration. Do not mix incompatible vectors into one anonymous column and assume they are comparable.
Multiple models are useful for migrations, multilingual search, image-plus-text retrieval, domain-specific embeddings, or A/B testing. The complexity appears when you need to combine results across those spaces.
Why Would You Keep More Than One Embedding Model?
| Reason | Example |
|---|---|
| Model migration | Old encoder stays live while new vectors backfill |
| Multilingual search | General English model + multilingual model |
| Different modalities | Text embeddings + image embeddings |
| Domain specialization | General documents + code embeddings |
| Quality testing | A/B retrieval before replacing production model |
| Late interaction | Dense retriever + ColBERT-style reranking |
A private knowledge base evolves. Locking every document permanently to the first embedding model you chose makes upgrades unnecessarily disruptive.
Different Models Produce Different Vector Spaces
Two models may both emit 768-dimensional vectors and still be incompatible. The coordinates only have meaning relative to the model that produced them.
Document A
|
+-- Model v1 -> vector_v1 [768]
|
+-- Model v2 -> vector_v2 [1024]
|
+-- image model -> vector_image [512]
A query generated with Model v2 should search the v2 space. Comparing it directly against Model v1 vectors is meaningless even if an API accepts the dimensions.
Qdrant's current named vector documentation explicitly supports multiple vectors of different sizes and types in the same point, each under a separate named vector space.
Use a Model Registry, Not Just a Vector Name
Record enough metadata to reproduce every embedding:
embedding_space: text_v2
model_id: example/model-name
model_revision: sha-or-version
vector_dim: 1024
metric: cosine
normalized: true
chunking_policy: semantic-v3
created_at: 2026-09-03
Chunking belongs in the registry too. If you change both the embedding model and how documents are split, retrieval changes for two reasons. Keeping the pipeline version explicit makes comparison and rollback possible.
One Collection With Named Vectors or Separate Collections?
Both designs can be correct.
| Design | Best When | Trade-off |
|---|---|---|
| Named vectors on same object | Same documents/payload across models | Larger object/index footprint |
| Separate collections | Different schemas, lifecycle, scale, or permissions | More synchronization work |
| One Postgres table + model_id | SQL-centric stack | Indexes must be scoped correctly |
Weaviate's collection documentation similarly supports multiple named vector spaces per object, each with its own vectorizer and index configuration.
If permissions differโfor example, family documents versus work documentsโseparate collections can still be cleaner than putting every representation into one object.
Can pgvector Store Different Dimensions?
Yes. Pgvector's documentation shows a generic vector column with a model_id, then uses expression and partial indexes for rows of a specific dimensionality.
The principle is the same: keep the model identity in the data model and build the ANN index only over compatible rows.
Do Not Compare Raw Similarity Scores Across Models
This is the most subtle failure. A cosine similarity of 0.78 from Model A does not necessarily mean the same quality as 0.78 from Model B. Score distributions depend on model training, normalization, metric, domain, and index behavior.
If you want one result list from two embedding models, first retrieve separately:
Query
|
+-- Model A -> top 20 results + ranks
|
+-- Model B -> top 20 results + ranks
|
v
fusion / reranker
|
v
final top 10
Safer combination methods include rank fusion, model-specific score normalization calibrated on your data, or a cross-encoder/reranker that evaluates the candidate text after retrieval.
Weaviate's multi-target search documentation exposes join strategies including normalized/weighted combinations, which illustrates why cross-space fusion needs an explicit strategy rather than naรฏve raw-score sorting.
How Do You Migrate to a New Embedding Model Without Downtime?
Do not delete the old embeddings first. Use a parallel migration:
- register the new model and vector space;
- generate new embeddings for newly ingested documents;
- backfill old documents in batches;
- run shadow searches against both spaces;
- compare recall and task success on real questions;
- switch the default query space;
- keep the old vectors for a rollback window;
- remove them only after confidence is high.
Weaviate notes that adding a new named vector does not automatically re-vectorize existing objects. That behavior is useful to remember because โschema supports new modelโ and โall old data has new vectorsโ are separate milestones.
Multiple Embeddings Increase Storage Faster Than Many Users Expect
Every extra vector representation can add another dense array plus another ANN index. A second embedding model can therefore roughly multiply the vector/index portion of the database even though the original documents are stored only once.
Estimate:
vector bytes ~=
document chunks
x dimensions
x bytes per element
x number of embedding spaces
+ ANN index overhead
+ metadata / payload indexes
Quantization or half-precision indexes can reduce the footprint, but test retrieval quality before applying compression to every model.
This ties back to the question of local knowledge-base architecture: embeddings are replaceable derived data, while the source documents and metadata are the durable assets that let you rebuild them.
Use Different Models for Different Query Routes
You do not have to search every vector space for every question. Route by need:
| Query | Embedding Space |
|---|---|
| English home manuals | general_text_v2 |
| Chinese + English notes | multilingual_v1 |
| Source-code question | code_v1 |
| Find similar photo | image_v1 |
| Unknown / broad search | two spaces + rank fusion |
A small query classifier can select the appropriate space, while ambiguous searches can fan out across two representations and merge the results.
Permissions Must Apply Before Fusion
Do not retrieve unauthorized candidates from every vector space and hope the final reranker hides them. Apply user/document permissions at each retrieval stage so sensitive chunks do not enter the candidate set, logs, or reranker prompt.
For private NAS search, the same access-control rule must survive model migrations. A new index should inherit the document's permission metadata rather than becoming a temporary unprotected copy.
The private AI assistant guide provides the larger context: vector search is useful only when it respects the same private-data boundaries as the file store.
Multi-Embedding QA Checklist
- Give every embedding space a unique model/version ID.
- Record dimensions, normalization, and distance metric.
- Version chunking and preprocessing.
- Never query one model's vector against another model's index.
- Do not directly compare raw scores across spaces without calibration.
- Apply permissions inside every retrieval path.
- Backfill new vectors before changing the default.
- Evaluate on real questions and known relevant documents.
- Keep the previous index through a rollback window.
- Include extra vectors and indexes in disk/RAM capacity planning.
FAQs
Can two embedding models use different dimensions in one database?
Yes, if the database supports separate named vector spaces, collections, or indexes for each compatible dimension. Qdrant, Weaviate, and pgvector all provide patterns for this.
Can I switch embedding models without re-embedding old documents?
Not if you want the old documents searchable in the new model's vector space. A new query vector is not compatible with embeddings produced by another model.
Should I keep old embeddings forever?
No. Keep them during evaluation and rollback. Once the new model is validated and the migration is complete, removing obsolete vectors can recover substantial storage and index memory.
Final Verdict
Multiple embedding models can coexist cleanly in one private search system when their vector spaces remain explicit. Store model and pipeline metadata, query each space with the matching encoder, fuse results deliberately, and migrate by backfilling in parallel. The dangerous design is not โmore than one model.โ It is losing track of which model produced which vector and pretending every similarity score means the same thing.
Tech & AI HUB
More to Read

Top 10 Local AI Web UI for Home Labs In 2026
Compare 10 self-hosted local AI web UIs for home labs, covering Ollama support, RAG, agents, multi-user access, setup effort, and ideal use cases.

How Much Does GPT-6 Astra Cost Over Time? When Cloud AI Makes Sense vs Local AI
A practical GPT-6 Astra cost guide covering token usage, long-term AI workloads, cloud vs local tradeoffs, and why hybrid AI infrastructure matters.

GPT-6 Astra vs Local AI: Which Parts of an Agent Should Stay on Your Home Server?
GPT-6 Astra can stay in the cloud while your home server keeps files, memory, RAG, tools, permissions, and durable agent state local.

