You upsert a document and query for it 200 milliseconds later, but it never appears. Pick the most likely cause.
Options
The write landed in a buffer or fresh segment that is not yet searchable; the index has a freshness lag between acknowledged write and queryable vector
The vector was silently rejected because its values were not normalized to unit length
ANN search is approximate, so a brand new vector has a permanently lower chance of being found
The query embedding model must be restarted before it can see new vectors
Concept explanation~2 min read
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
Concept explanation~2 min read
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
Freshness lag is one of those production behaviours that looks like a bug the first time a developer hits it and is documented as a feature in every engine that has it. The mental model that confuses people is borrowed from a relational database, where a successful insert is immediately visible to the next select inside the same transaction. Vector databases do not work that way.
The rest of this section walks through why the separation exists, how the major engines expose it, and what application patterns make it invisible to users. The key insight is that vector indexes are optimized for query throughput and recall, not for write after read consistency, and the freshness lag is the price of that optimization.
Why durability and queryability are separate
A vector database has two jobs: store vectors safely, and answer nearest neighbour queries fast. The structures that do those two jobs are different.
Durability lives in a write ahead log and replicated segment files on disk. Adding a record is cheap: append to the log, flush, return success. The cost is dominated by the disk fsync, which is fast on modern SSDs.
Queryability lives in an HNSW graph or an IVF posting structure. Inserting into an HNSW graph means walking the upper layers to find the right insertion point, choosing M neighbours, and updating bidirectional links on each of them. This is much more expensive than appending to a log; doing it synchronously on every write would cap ingest throughput at a small fraction of what the log can absorb.
The fix is to batch. Writes accumulate in a buffer (a memtable, a fresh segment, or a delta layer), and the engine merges the buffer into the main index periodically. The acknowledgement is fast because it requires only the log write; the index update happens in the background.
The consequence is that for some interval after acknowledgement, the vector is durable but not findable. This interval is the freshness window. Different engines expose different windows because they batch differently.