Use two prefetch branches and fuse their candidate lists with RRF
I would model the collection with a named dense vector and a named sparse vector, generate both query representations, retrieve a candidate set from each using prefetch, and then apply a fusion query such as Reciprocal Rank Fusion. RRF is a good starting point because dense and sparse scores do not necessarily share the same numerical scale. The important design decision is candidate depth: each branch should retrieve enough candidates that relevant documents are unlikely to disappear before fusion, while not making the first-stage search unnecessarily expensive. I would then measure recall, latency, and fusion quality offline before tuning limits. A common mistake is multiplying or directly adding raw dense and sparse scores without calibration. The exact Universal Query API and client syntax is version-sensitive, so production code should match the installed Qdrant SDK/server release.
RRF uses ranking positions rather than requiring dense and sparse scores to be directly comparable.
Candidate depth is a quality/latency knob: too few candidates can reduce recall before fusion; too many increase work.
An alternative is DBSF or a calibrated weighted score when you have evidence that score distributions are stable and comparable enough for your workload.
Qdrant's Universal Query API, prefetch, and fusion interfaces are version-sensitive; verify the exact SDK syntax for the deployed client/server version.
0-2 years experience
2-5 years experience
5-8 years experience
8+ years experience