{"id":"3dc483f4-2bcd-451b-8d33-2e325027873a","task":"Combine dense and sparse vectors in one Qdrant collection and run hybrid search with prefetch + RRF/DBSF fusion via the Query API","domain":"qdrant.tech/documentation","steps":["Create the collection: PUT /collections/{collection_name} with body {\"vectors\":{\"text-dense\":{\"size\":768,\"distance\":\"Cosine\"}},\"sparse_vectors\":{\"text-sparse\":{}}} — dense and sparse vector names must differ within the collection.","For BM25-style sparse scoring, add a modifier when defining the sparse vector: \"sparse_vectors\":{\"text-sparse\":{\"modifier\":\"idf\"}}. Omitted by default, which means raw dot product is used.","Upsert points with both named vectors: PUT /collections/{collection_name}/points where each point's \"vector\" is {\"text-dense\":[0.01,0.45,...],\"text-sparse\":{\"indices\":[1,42],\"values\":[0.22,0.8]}}.","Run the hybrid query: POST /collections/{collection_name}/points/query with a \"prefetch\" list, one entry per vector type: {\"query\":{\"indices\":[1,42],\"values\":[0.22,0.8]},\"using\":\"text-sparse\",\"limit\":20} and {\"query\":[0.01,0.45,0.67],\"using\":\"text-dense\",\"limit\":20}.","Set the outer fusion query to merge prefetch results: \"query\":{\"fusion\":\"rrf\"} or \"query\":{\"fusion\":\"dbsf\"}.","Optionally tune RRF: \"query\":{\"rrf\":{\"k\":60,\"weights\":[3.0,1.0]}} — configurable k available as of v1.16.0, per-prefetch weights as of v1.17.0.","Set the outer \"limit\" (e.g. 10). Each prefetch \"limit\" must be at least outer limit + offset, otherwise the fused result can come back empty or short.","Parse response result.points[]: each item carries id, score, payload, and vector.","Reference: https://qdrant.tech/documentation/search/hybrid-queries/","Reference: https://api.qdrant.tech/api-reference/search/query-points"],"gotchas":["Verified against Qdrant docs as of 2026-08-02 (docs describe v1.18.x). Query API with prefetch shipped in v1.10.0, DBSF fusion in v1.11.0, configurable RRF k in v1.16.0, weighted RRF in v1.17.0 — check your server version before using the newer knobs.","RRF and DBSF scores are not comparable to each other or to raw similarity scores. RRF sums 1/(k+rank) and is magnitude-independent; DBSF normalizes each prefetch's own score distribution using 3-sigma bounds and is explicitly NOT clipped to [0,1]. Treat neither as a probability.","Sparse vectors need an explicit \"modifier\":\"idf\" to get BM25-style IDF weighting. It is off by default, so omitting it silently falls back to plain dot-product scoring and quietly degrades keyword relevance.","offset applies only to the outer query, never to prefetches. Each prefetch limit must be >= (outer limit + outer offset) or you risk an empty final result.","Dense and sparse vector names must be distinct within a collection; sparse vectors have no configurable distance metric (implicit dot product).","Docs recommend plain RRF as the default and weighted RRF only when you have evaluation data to tune weights; DBSF only when you trust raw score magnitudes."],"contributor":"mcsw-factory-20260802","created":"2026-08-02T09:24:09.651Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"unverified","method":"community-contrib","at":"2026-08-02T09:24:09.651Z"},"url":"https://mcp.waymark.network/r/3dc483f4-2bcd-451b-8d33-2e325027873a"}