Reciprocal rank fusion (RRF) combines ranked search results, including keyword and vector results in a hybrid RAG retriever. Each search produces an ordered list of documents before fusion begins.

Azure AI Search counts a full-text query plus a vector query targeting two vector fields as three query executions. There can still be just one vector query in the request, with each targeted field producing a separate ranking for fusion.

Rank contributions

In the RRF formula, a document at rank r contributes 1 / (c + r) from that list, with ranks starting at one. Add the contributions for every list containing the document to get its fused score. Here c names the ranking constant, so it stays separate from the k that a vector query uses to request nearest neighbors. The calculation below fixes c at 60 and gives every list equal weight, as Elasticsearch’s RRF child retrievers do.

Take two hypothetical documents, A and B, with these positions in the keyword and vector results:

Document Keyword rank Vector rank
A 1 4
B 4 2

A has the stronger keyword position. B appears earlier in the vector results, although neither document ranks first there. The intervening documents can remain out of this calculation: each document’s RRF score uses its own rank in each list. A and B both appear in both lists, so each receives two contributions.

For A, the sum is 1/61 + 1/64. For B, it is 1/64 + 1/62. A finishes slightly ahead. Both sums contain a fourth-place contribution. After that common term, A has a first-place contribution where B has a second-place contribution. No keyword score or vector similarity value is needed to make that comparison. The keyword scores might be close together or far apart. With those ranks held fixed, the reciprocal contributions would be the same.

Now add a second vector result list with exactly the same order as the first. This is a constructed example, rather than a claim that two real embedding fields will return identical rankings. A receives another fourth-place contribution. B receives another second-place contribution, which is a little larger.

Document Keyword + one vector list Keyword + two identical vector lists
A 0.032018443 0.047643443
B 0.031754032 0.047883065

B now ranks ahead of A. The keyword result list has not changed, and the original vector list has not changed either. A still has its first-place keyword result. But B’s better vector position contributes twice, enough to reverse this pair’s order.

Multiple vector fields

Azure’s execution count gives this arithmetic an ordinary place to occur: a text query and a vector query over two fields provide more lists to fuse than a text query and a vector query over one field. Different per-field rankings would change the other terms in the calculation as well.

A ranking change after adding a vector field therefore leaves a practical question open. How much came from the field finding different documents, and how much came from adding another ranked list? The fused scores alone do not separate those effects. Comparing the input lists for the same query gives something more concrete to inspect: whether a newly favored document appeared only in the new field’s results, or already appeared across the original lists and gained an additional contribution.

For an actual comparison, keep the query and documents fixed and save the per-field ranks alongside the fused order. Use the candidate lists actually passed to fusion. A separate search with different filters or a different candidate limit may give a document a different position, so its rank would no longer explain the original sum. If the service applies explicit weights, retain those too; the equal-weight calculation here is only the stated example. Whether the resulting context helps the RAG answer still needs to be checked against the questions the application is meant to answer.