Vector search uses a bi-encoder: a model that turns the question into one vector and, separately and ahead of time, each document into one vector, then compares the two. Because document vectors do not depend on the question, they are computed once and stored, which is why search over millions of documents takes milliseconds. But each vector is a compressed summary, and comparing two summaries catches shared topic more than whether the document really answers the question.
A reranker is usually a cross-encoder: a model that takes the question and one document joined into a single input and reads them together. Attention, the part of the model that relates words to each other, runs across both texts at once, and the model outputs one relevance score. It answers a sharper question: not "are these about similar things" but "does this document answer this question".
That is also why it is slow. The score depends on the question, so nothing can be computed in advance, and 50 candidates means 50 model passes at query time. Over a million documents that is hopeless; over the 50 survivors of the first stage it is a small, fixed cost. Between the two sit late-interaction models, which keep several vectors per document and compare them token by token, trading some speed for some accuracy.