From fc299a0e9c13c13e78801c1de26ed3abf4faa183 Mon Sep 17 00:00:00 2001 From: Dylan Couzon Date: Fri, 15 May 2026 21:04:09 -0400 Subject: [PATCH] Switch hybrid-rrf snippets to RrfQuery API Replaces the older `FusionQuery(fusion=Fusion.RRF)` enum form with `RrfQuery(rrf=Rrf())` across all language tabs (Python, TypeScript, Rust, Go, Java, C#) plus the REST body in `http.md`, for both the `hybrid-rrf/` snippet and the inner RRF prefetch inside `hybrid-formula-decay/`. The newer dedicated `Rrf` message is the recommended path going forward; the old enum stays supported for backward compatibility. Server-side both forms converge to the same `FusionInternal::Rrf { k: 2, weights: None }`, verified against the qdrant/qdrant source. `generated/*.md` files in both directories regenerated via `./docker.sh ./generate-md.py`. `./docker.sh ./check.py build` passes across all six SDKs. Also softens the DBSF prose in hybrid-queries.md to drop the "weighted RRF tends to win" framing. Neither method dominates the other in general. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../snippets/query-points/hybrid-formula-decay/csharp.cs | 2 +- .../query-points/hybrid-formula-decay/generated/csharp.md | 2 +- .../query-points/hybrid-formula-decay/generated/go.md | 2 +- .../query-points/hybrid-formula-decay/generated/java.md | 6 +++--- .../query-points/hybrid-formula-decay/generated/python.md | 2 +- .../query-points/hybrid-formula-decay/generated/rust.md | 6 +++--- .../hybrid-formula-decay/generated/typescript.md | 2 +- .../snippets/query-points/hybrid-formula-decay/go.go | 2 +- .../snippets/query-points/hybrid-formula-decay/http.md | 2 +- .../snippets/query-points/hybrid-formula-decay/java.java | 6 +++--- .../snippets/query-points/hybrid-formula-decay/python.py | 2 +- .../snippets/query-points/hybrid-formula-decay/rust.rs | 6 +++--- .../query-points/hybrid-formula-decay/typescript.ts | 2 +- .../headless/snippets/query-points/hybrid-rrf/csharp.cs | 2 +- .../snippets/query-points/hybrid-rrf/generated/csharp.md | 2 +- .../snippets/query-points/hybrid-rrf/generated/go.md | 2 +- .../snippets/query-points/hybrid-rrf/generated/java.md | 6 +++--- .../snippets/query-points/hybrid-rrf/generated/python.md | 2 +- .../snippets/query-points/hybrid-rrf/generated/rust.md | 4 ++-- .../query-points/hybrid-rrf/generated/typescript.md | 2 +- .../headless/snippets/query-points/hybrid-rrf/go.go | 2 +- .../headless/snippets/query-points/hybrid-rrf/http.md | 2 +- .../headless/snippets/query-points/hybrid-rrf/java.java | 6 +++--- .../headless/snippets/query-points/hybrid-rrf/python.py | 2 +- .../headless/snippets/query-points/hybrid-rrf/rust.rs | 4 ++-- .../headless/snippets/query-points/hybrid-rrf/typescript.ts | 2 +- .../content/documentation/search/hybrid-queries.md | 2 +- 27 files changed, 41 insertions(+), 41 deletions(-) diff --git a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/csharp.cs b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/csharp.cs index 856e2cba8..07e015794 100644 --- a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/csharp.cs +++ b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/csharp.cs @@ -24,7 +24,7 @@ public class Snippet Limit = 100 }, }, - Query = Fusion.Rrf, + Query = new Rrf(), Limit = 100 }, ], diff --git a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/generated/csharp.md b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/generated/csharp.md index a56c4f8eb..09c63fd82 100644 --- a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/generated/csharp.md +++ b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/generated/csharp.md @@ -21,7 +21,7 @@ await client.QueryAsync( Limit = 100 }, }, - Query = Fusion.Rrf, + Query = new Rrf(), Limit = 100 }, ], diff --git a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/generated/go.md b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/generated/go.md index c430a8bb7..fcba8cd9e 100644 --- a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/generated/go.md +++ b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/generated/go.md @@ -26,7 +26,7 @@ client.Query(context.Background(), &qdrant.QueryPoints{ Limit: qdrant.PtrOf(uint64(100)), }, }, - Query: qdrant.NewQueryFusion(qdrant.Fusion_RRF), + Query: qdrant.NewQueryRRF(&qdrant.Rrf{}), Limit: qdrant.PtrOf(uint64(100)), }, }, diff --git a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/generated/java.md b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/generated/java.md index c0d70ab5a..93ecaae6c 100644 --- a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/generated/java.md +++ b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/generated/java.md @@ -5,16 +5,16 @@ import static io.qdrant.client.ExpressionFactory.expDecay; import static io.qdrant.client.ExpressionFactory.sum; import static io.qdrant.client.ExpressionFactory.variable; import static io.qdrant.client.QueryFactory.formula; -import static io.qdrant.client.QueryFactory.fusion; import static io.qdrant.client.QueryFactory.nearest; +import static io.qdrant.client.QueryFactory.rrf; import io.qdrant.client.QdrantClient; import io.qdrant.client.QdrantGrpcClient; import io.qdrant.client.grpc.Points.DecayParamsExpression; import io.qdrant.client.grpc.Points.Formula; -import io.qdrant.client.grpc.Points.Fusion; import io.qdrant.client.grpc.Points.PrefetchQuery; import io.qdrant.client.grpc.Points.QueryPoints; +import io.qdrant.client.grpc.Points.Rrf; import io.qdrant.client.grpc.Points.SumExpression; import java.util.List; @@ -38,7 +38,7 @@ client.queryAsync( .setUsing("dense") .setLimit(100) .build()) - .setQuery(fusion(Fusion.RRF)) + .setQuery(rrf(Rrf.newBuilder().build())) .setLimit(100) .build()) .setQuery( diff --git a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/generated/python.md b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/generated/python.md index 86cdb93ab..d5a61d8b4 100644 --- a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/generated/python.md +++ b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/generated/python.md @@ -18,7 +18,7 @@ client.query_points( limit=100, ), ], - query=models.FusionQuery(fusion=models.Fusion.RRF), + query=models.RrfQuery(rrf=models.Rrf()), limit=100, ), query=models.FormulaQuery( diff --git a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/generated/rust.md b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/generated/rust.md index 397f1512b..137dd15b2 100644 --- a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/generated/rust.md +++ b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/generated/rust.md @@ -1,8 +1,8 @@ ```rust use qdrant_client::Qdrant; use qdrant_client::qdrant::{ - DecayParamsExpressionBuilder, Expression, FormulaBuilder, Fusion, PrefetchQueryBuilder, Query, - QueryPointsBuilder, + DecayParamsExpressionBuilder, Expression, FormulaBuilder, PrefetchQueryBuilder, Query, + QueryPointsBuilder, RrfBuilder, }; let client = Qdrant::from_url("http://localhost:6334").build()?; @@ -23,7 +23,7 @@ client.query( .using("dense") .limit(100u64), ) - .query(Query::new_fusion(Fusion::Rrf)) + .query(Query::new_rrf(RrfBuilder::default())) .limit(100u64), ) .query( diff --git a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/generated/typescript.md b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/generated/typescript.md index 78e16be10..17fdeff74 100644 --- a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/generated/typescript.md +++ b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/generated/typescript.md @@ -20,7 +20,7 @@ await client.query("{collection_name}", { limit: 100, }, ], - query: { fusion: "rrf" }, + query: { rrf: {} }, limit: 100, }, query: { diff --git a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/go.go b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/go.go index 284e6b79b..4647fc1fc 100644 --- a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/go.go +++ b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/go.go @@ -30,7 +30,7 @@ func Main() { Limit: qdrant.PtrOf(uint64(100)), }, }, - Query: qdrant.NewQueryFusion(qdrant.Fusion_RRF), + Query: qdrant.NewQueryRRF(&qdrant.Rrf{}), Limit: qdrant.PtrOf(uint64(100)), }, }, diff --git a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/http.md b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/http.md index 055fa8808..648d1ad4e 100644 --- a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/http.md +++ b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/http.md @@ -17,7 +17,7 @@ POST /collections/{collection_name}/points/query "limit": 100 } ], - "query": { "fusion": "rrf" }, + "query": { "rrf": {} }, "limit": 100 }, "query": { diff --git a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/java.java b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/java.java index e33b3a2c6..46cc0cb92 100644 --- a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/java.java +++ b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/java.java @@ -6,16 +6,16 @@ import static io.qdrant.client.ExpressionFactory.expDecay; import static io.qdrant.client.ExpressionFactory.sum; import static io.qdrant.client.ExpressionFactory.variable; import static io.qdrant.client.QueryFactory.formula; -import static io.qdrant.client.QueryFactory.fusion; import static io.qdrant.client.QueryFactory.nearest; +import static io.qdrant.client.QueryFactory.rrf; import io.qdrant.client.QdrantClient; import io.qdrant.client.QdrantGrpcClient; import io.qdrant.client.grpc.Points.DecayParamsExpression; import io.qdrant.client.grpc.Points.Formula; -import io.qdrant.client.grpc.Points.Fusion; import io.qdrant.client.grpc.Points.PrefetchQuery; import io.qdrant.client.grpc.Points.QueryPoints; +import io.qdrant.client.grpc.Points.Rrf; import io.qdrant.client.grpc.Points.SumExpression; import java.util.List; @@ -41,7 +41,7 @@ public class Snippet { .setUsing("dense") .setLimit(100) .build()) - .setQuery(fusion(Fusion.RRF)) + .setQuery(rrf(Rrf.newBuilder().build())) .setLimit(100) .build()) .setQuery( diff --git a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/python.py b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/python.py index f011321bd..a23105a43 100644 --- a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/python.py +++ b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/python.py @@ -17,7 +17,7 @@ client.query_points( limit=100, ), ], - query=models.FusionQuery(fusion=models.Fusion.RRF), + query=models.RrfQuery(rrf=models.Rrf()), limit=100, ), query=models.FormulaQuery( diff --git a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/rust.rs b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/rust.rs index 7106b6cb0..04c76d114 100644 --- a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/rust.rs +++ b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/rust.rs @@ -1,7 +1,7 @@ use qdrant_client::Qdrant; use qdrant_client::qdrant::{ - DecayParamsExpressionBuilder, Expression, FormulaBuilder, Fusion, PrefetchQueryBuilder, Query, - QueryPointsBuilder, + DecayParamsExpressionBuilder, Expression, FormulaBuilder, PrefetchQueryBuilder, Query, + QueryPointsBuilder, RrfBuilder, }; pub async fn main() -> anyhow::Result<()> { @@ -23,7 +23,7 @@ pub async fn main() -> anyhow::Result<()> { .using("dense") .limit(100u64), ) - .query(Query::new_fusion(Fusion::Rrf)) + .query(Query::new_rrf(RrfBuilder::default())) .limit(100u64), ) .query( diff --git a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/typescript.ts b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/typescript.ts index 0d6561f2a..bcf7ec925 100644 --- a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/typescript.ts +++ b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-formula-decay/typescript.ts @@ -19,7 +19,7 @@ await client.query("{collection_name}", { limit: 100, }, ], - query: { fusion: "rrf" }, + query: { rrf: {} }, limit: 100, }, query: { diff --git a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/csharp.cs b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/csharp.cs index 6c38c16b0..d1d433c8d 100644 --- a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/csharp.cs +++ b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/csharp.cs @@ -25,7 +25,7 @@ public class Snippet Limit = 20 } }, - query: Fusion.Rrf + query: new Rrf() ); } } diff --git a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/generated/csharp.md b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/generated/csharp.md index 3857ffa9a..d27d0e1c0 100644 --- a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/generated/csharp.md +++ b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/generated/csharp.md @@ -22,6 +22,6 @@ await client.QueryAsync( Limit = 20 } }, - query: Fusion.Rrf + query: new Rrf() ); ``` diff --git a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/generated/go.md b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/generated/go.md index f03029fa0..d1cc442bc 100644 --- a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/generated/go.md +++ b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/generated/go.md @@ -22,6 +22,6 @@ client.Query(context.Background(), &qdrant.QueryPoints{ Using: qdrant.PtrOf("dense"), }, }, - Query: qdrant.NewQueryFusion(qdrant.Fusion_RRF), + Query: qdrant.NewQueryRRF(&qdrant.Rrf{}), }) ``` diff --git a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/generated/java.md b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/generated/java.md index 787d7ead5..ca0857990 100644 --- a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/generated/java.md +++ b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/generated/java.md @@ -1,12 +1,12 @@ ```java -import static io.qdrant.client.QueryFactory.fusion; import static io.qdrant.client.QueryFactory.nearest; +import static io.qdrant.client.QueryFactory.rrf; import io.qdrant.client.QdrantClient; import io.qdrant.client.QdrantGrpcClient; -import io.qdrant.client.grpc.Points.Fusion; import io.qdrant.client.grpc.Points.PrefetchQuery; import io.qdrant.client.grpc.Points.QueryPoints; +import io.qdrant.client.grpc.Points.Rrf; import java.util.List; QdrantClient client = new QdrantClient(QdrantGrpcClient.newBuilder("localhost", 6334, false).build()); @@ -24,7 +24,7 @@ client.queryAsync( .setUsing("dense") .setLimit(20) .build()) - .setQuery(fusion(Fusion.RRF)) + .setQuery(rrf(Rrf.newBuilder().build())) .build()) .get(); ``` diff --git a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/generated/python.md b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/generated/python.md index 77c071145..0bb34cfe3 100644 --- a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/generated/python.md +++ b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/generated/python.md @@ -17,6 +17,6 @@ client.query_points( limit=20, ), ], - query=models.FusionQuery(fusion=models.Fusion.RRF), + query=models.RrfQuery(rrf=models.Rrf()), ) ``` diff --git a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/generated/rust.md b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/generated/rust.md index 86578aced..7d3566307 100644 --- a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/generated/rust.md +++ b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/generated/rust.md @@ -1,6 +1,6 @@ ```rust use qdrant_client::Qdrant; -use qdrant_client::qdrant::{Fusion, PrefetchQueryBuilder, Query, QueryPointsBuilder}; +use qdrant_client::qdrant::{PrefetchQueryBuilder, Query, QueryPointsBuilder, RrfBuilder}; let client = Qdrant::from_url("http://localhost:6334").build()?; @@ -16,6 +16,6 @@ client.query( .using("dense") .limit(20u64) ) - .query(Query::new_fusion(Fusion::Rrf)) + .query(Query::new_rrf(RrfBuilder::default())) ).await?; ``` diff --git a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/generated/typescript.md b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/generated/typescript.md index edfe43702..ca5e98330 100644 --- a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/generated/typescript.md +++ b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/generated/typescript.md @@ -20,7 +20,7 @@ client.query("{collection_name}", { }, ], query: { - fusion: 'rrf', + rrf: {}, }, }); ``` diff --git a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/go.go b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/go.go index 14caea17b..2366db952 100644 --- a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/go.go +++ b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/go.go @@ -26,6 +26,6 @@ func Main() { Using: qdrant.PtrOf("dense"), }, }, - Query: qdrant.NewQueryFusion(qdrant.Fusion_RRF), + Query: qdrant.NewQueryRRF(&qdrant.Rrf{}), }) } diff --git a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/http.md b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/http.md index 32a351da9..8daeabc3d 100644 --- a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/http.md +++ b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/http.md @@ -16,7 +16,7 @@ POST /collections/{collection_name}/points/query "limit": 20 } ], - "query": { "fusion": "rrf" }, // <--- reciprocal rank fusion + "query": { "rrf": {} }, // <--- reciprocal rank fusion with defaults "limit": 10 } ``` diff --git a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/java.java b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/java.java index 60e6d1d12..ca73cd892 100644 --- a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/java.java +++ b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/java.java @@ -1,13 +1,13 @@ package com.example.snippets_amalgamation; -import static io.qdrant.client.QueryFactory.fusion; import static io.qdrant.client.QueryFactory.nearest; +import static io.qdrant.client.QueryFactory.rrf; import io.qdrant.client.QdrantClient; import io.qdrant.client.QdrantGrpcClient; -import io.qdrant.client.grpc.Points.Fusion; import io.qdrant.client.grpc.Points.PrefetchQuery; import io.qdrant.client.grpc.Points.QueryPoints; +import io.qdrant.client.grpc.Points.Rrf; import java.util.List; public class Snippet { @@ -27,7 +27,7 @@ public class Snippet { .setUsing("dense") .setLimit(20) .build()) - .setQuery(fusion(Fusion.RRF)) + .setQuery(rrf(Rrf.newBuilder().build())) .build()) .get(); } diff --git a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/python.py b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/python.py index 7be52a7df..2de6af586 100644 --- a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/python.py +++ b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/python.py @@ -16,5 +16,5 @@ client.query_points( limit=20, ), ], - query=models.FusionQuery(fusion=models.Fusion.RRF), + query=models.RrfQuery(rrf=models.Rrf()), ) diff --git a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/rust.rs b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/rust.rs index 74acd7750..6b540ddae 100644 --- a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/rust.rs +++ b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/rust.rs @@ -1,5 +1,5 @@ use qdrant_client::Qdrant; -use qdrant_client::qdrant::{Fusion, PrefetchQueryBuilder, Query, QueryPointsBuilder}; +use qdrant_client::qdrant::{PrefetchQueryBuilder, Query, QueryPointsBuilder, RrfBuilder}; pub async fn main() -> anyhow::Result<()> { let client = Qdrant::from_url("http://localhost:6334").build()?; @@ -16,7 +16,7 @@ pub async fn main() -> anyhow::Result<()> { .using("dense") .limit(20u64) ) - .query(Query::new_fusion(Fusion::Rrf)) + .query(Query::new_rrf(RrfBuilder::default())) ).await?; Ok(()) diff --git a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/typescript.ts b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/typescript.ts index 3dc37f5cd..f17b85025 100644 --- a/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/typescript.ts +++ b/qdrant-landing/content/documentation/headless/snippets/query-points/hybrid-rrf/typescript.ts @@ -19,6 +19,6 @@ client.query("{collection_name}", { }, ], query: { - fusion: 'rrf', + rrf: {}, }, }); diff --git a/qdrant-landing/content/documentation/search/hybrid-queries.md b/qdrant-landing/content/documentation/search/hybrid-queries.md index 355fc728b..b5f8546f3 100644 --- a/qdrant-landing/content/documentation/search/hybrid-queries.md +++ b/qdrant-landing/content/documentation/search/hybrid-queries.md @@ -98,7 +98,7 @@ Normalized scores are summed across retrievers. Different score magnitudes no lo -DBSF is a reasonable choice when you trust your retrievers' raw scores to carry magnitude information. Weighted RRF tends to win when you have an eval set and can grid-search, but DBSF remains competitive on retrievers with well-calibrated score distributions. Two caveats apply: the statistics come from the prefetch top-k (a small sample), and a single dominant outlier in that top-k can skew normalization for that query. Increase the prefetch `limit` if you see unstable rankings. +DBSF is a reasonable choice when you trust your retrievers' raw scores to carry magnitude information. On well-calibrated retrievers DBSF can outperform tuned weighted RRF; on others weighted RRF wins. Neither dominates the other in general, so use your eval set to choose between them. Two caveats apply: the statistics come from the prefetch top-k (a small sample), and a single dominant outlier in that top-k can skew normalization for that query. Increase the prefetch `limit` if you see unstable rankings. {{< code-snippet path="/documentation/headless/snippets/query-points/hybrid-dbsf/" >}}