Recall@5 fell from 0.82 to 0.31 after the query embedder changed from text-embedding-ada-002 to text-embedding-3-large while the stored corpus vectors stayed untouched. Re-indexing the corpus with the same pinned model brought the eval back to 0.84.
query: "how long can enterprise admins restore a deleted workspace?"
query_model: text-embedding-3-large, dimensions=1536
index_model: text-embedding-ada-002, dimensions=1536
metric: cosine, pgvector operator <=>
before deploy, all ada: Recall@5 0.82
after deploy, mixed index: Recall@5 0.31
after full reindex, all v3: Recall@5 0.84
The bad result was not random noise. It was the wrong kind of coherent. A query about workspace retention pulled audit-log setup pages because those documents lived near the new query vector only by accident inside an old coordinate system. Since text-embedding-3-large was requested at 1536 dimensions, the database shape stayed valid and the HNSW index stayed usable. No dimension mismatch, no failed insert, no noisy crash.
The proof was a two-column eval. Holding the corpus fixed and changing only the query embedder reproduced the drop immediately. Re-embedding just 2,000 documents into a shadow collection with text-embedding-3-large restored the nearest neighbors for the sampled queries, which ruled out prompt changes, reranking, and document freshness.
The production repair was built around a hard model-alignment guarantee: build help_center_embeddings_v2, verify recall and score distributions there, then move the read alias. From that point forward, changing the query embedding model without a matching corpus backfill became a deploy-blocking metadata mismatch, not an unreviewed runtime flag.