<!-- llms-explorer concept facts · https://llms-explorer.com/tree/fusion-score-normalization-strategies/ · pack 2026-10-15 · ~3248 tokens -->

# Fusion score normalization strategies

> Depth-first rabbithole dossier for Fusion score normalization strategies; source-anchored research pack.

Parent: [Atlas Hybrid Fusion and BM25 Diagnostics](https://llms-explorer.com/tree/mongodb-atlas-hybrid-fusion-bm25-frontier-20261001/) · 5 facets · 28 facts · page: https://llms-explorer.com/tree/fusion-score-normalization-strategies/

## Definitions

- [low] The `details` field in `scoreDetails` is an array of objects providing a recursive breakdown of the score for each match based on subsets of the scoring formula. Sources: https://www.mongodb.com/docs/search/query/score/get-details.md — source: `~/.global-ai-hub/research/.pipeline/mongodb-2026-10-14/frb/fusion-score-normalization-strategies-4962cc7d2b/rabbithole-synthesis.md#core`
- [low] In Elastic's linear retriever, the final score is the sum of weighted normalized scores: Score = sum_i(weight_i x Normalizer(Score_i)). Sources: https://www.elastic.co/docs/reference/elasticsearch/rest-apis/retrievers/linear-retriever — source: `~/.global-ai-hub/research/.pipeline/mongodb-2026-10-14/frb/fusion-score-normalization-strategies-4962cc7d2b/rabbithole-synthesis.md#core`

## How it works

- [low] BM25 score distributions shift as the index grows and term frequencies change, while vector score distributions shift when embedding models are swapped. Sources: https://redis.io/blog/reciprocal-rank-fusion/ — source: `~/.global-ai-hub/research/.pipeline/mongodb-2026-10-14/frb/fusion-score-normalization-strategies-4962cc7d2b/rabbithole-synthesis.md#antipatterns`

## Problems, failure modes and limitations

- [low] Summing BM25 and vector scores without normalization is an antipattern because BM25 often wins by default due to absolute values being an order of magnitude larger. Sources: https://redis.io/blog/reciprocal-rank-fusion/ — source: `~/.global-ai-hub/research/.pipeline/mongodb-2026-10-14/frb/fusion-score-normalization-strategies-4962cc7d2b/rabbithole-synthesis.md#antipatterns`
- [low] The upper limit of an RRF score is bounded by the number of queries being fused, with each query contributing a maximum of approximately 1/k to the score. Sources: https://learn.microsoft.com/azure/search/hybrid-search-ranking — source: `~/.global-ai-hub/research/.pipeline/mongodb-2026-10-14/frb/fusion-score-normalization-strategies-4962cc7d2b/rabbithole-synthesis.md#core`
- [low] Using `none` as a normalizer is an antipattern because it disables normalization and may bias the result set towards lexical matches. Sources: https://www.elastic.co/docs/reference/elasticsearch/rest-apis/retrievers/linear-retriever — source: `~/.global-ai-hub/research/.pipeline/mongodb-2026-10-14/frb/fusion-score-normalization-strategies-4962cc7d2b/rabbithole-synthesis.md#antipatterns`

## Comparisons and alternatives

- [low] In the atlas-search-vs-vector-marketplace demo, `$scoreFusion` (RSF) combines by real scores normalized with `minMaxScaler`; MongoDB also supports `none` and `sigmoid`. Sources: https://github.com/adrianofratelli-glitch/atlas-search-vs-vector-marketplace — source: `~/.global-ai-hub/research/.pipeline/mongodb-2026-10-14/frb/fusion-score-normalization-strategies-4962cc7d2b/rabbithole-synthesis.md#core`
- [low] BM25 scores do not have a fixed universal range and vary with implementation, query, and corpus, unlike cosine similarity which is fixed between -1 and 1. Sources: https://redis.io/blog/reciprocal-rank-fusion/ — source: `~/.global-ai-hub/research/.pipeline/mongodb-2026-10-14/frb/fusion-score-normalization-strategies-4962cc7d2b/rabbithole-synthesis.md#methodology`
- [low] Native fusion is not necessarily faster than client-side fusion, but its value lies in a single round trip and keeping fusion logic in the database rather than in every client. Sources: https://github.com/adrianofratelli-glitch/atlas-search-vs-vector-marketplace — source: `~/.global-ai-hub/research/.pipeline/mongodb-2026-10-14/frb/fusion-score-normalization-strategies-4962cc7d2b/rabbithole-synthesis.md#patterns`
- [low] Mass ties in Atlas Search lexical scores from synthetic catalogs with near-identical text can collapse `$rankFusion` (same rank) and `$scoreFusion`/`minMaxScaler` (0/0 → 0), which is a property of BM25 over finite vocabulary, not a bug. Sources: https://github.com/adrianofratelli-glitch/atlas-search-vs-vector-marketplace — source: `~/.global-ai-hub/research/.pipeline/mongodb-2026-10-14/frb/fusion-score-normalization-strategies-4962cc7d2b/rabbithole-synthesis.md#patterns`

## Facts and statements

- [low] DAT (Dynamic Alpha Tuning) uses an LLM to score the top-1 results of dense and BM25 retrieval and calibrates the per-query weighting factor through effectiveness score normalization; it is not a convex-combination fusion. Sources: https://arxiv.org/abs/2503.23013 — source: `~/.global-ai-hub/research/.pipeline/mongodb-2026-10-14/frb/fusion-score-normalization-strategies-4962cc7d2b/rabbithole-synthesis.md#core`
- [low] Learning a Convex Combination (CC) fusion is generally agnostic to the choice of score normalization, whereas Reciprocal Rank Fusion (RRF) is sensitive to its parameters. Sources: https://arxiv.org/abs/2210.11934 — source: `~/.global-ai-hub/research/.pipeline/mongodb-2026-10-14/frb/fusion-score-normalization-strategies-4962cc7d2b/rabbithole-synthesis.md#methodology`
- [medium] The `$scoreFusion` stage supports three normalization methods: `none` (combines scores as-is), `sigmoid` (maps scores to (0, 1) via $sigmoid), and `minMaxScaler` (maps lowest score to 0 and highest to 1 via min-max scaling). Sources: https://www.mongodb.com/docs/vector-search/hybrid-search/hybrid-search-overview.md, https://www.mongodb.com/docs/manual/reference/operator/aggregation/score.md — source: `~/.global-ai-hub/research/.pipeline/mongodb-2026-10-14/frb/fusion-score-normalization-strategies-4962cc7d2b/rabbithole-synthesis.md#core`
- [medium] In `$scoreFusion`, `input.normalization` normalizes the score to the range 0 to 1 before combining results (values `none`, `sigmoid`, `minMaxScaler`); `none` applies no normalization. The sources describe normalization as optional only for `$score`. Sources: https://www.mongodb.com/docs/manual/reference/operator/aggregation/scoreFusion.md, https://www.mongodb.com/docs/manual/reference/operator/aggregation/score.md — source: `~/.global-ai-hub/research/.pipeline/mongodb-2026-10-14/frb/fusion-score-normalization-strategies-4962cc7d2b/rabbithole-synthesis.md#core`
- [low] In a `$rankFusion` hybrid search, `scoreDetails.details.value` shows the raw score from that pipeline before it is weighted and combined by reciprocal rank fusion, and `scoreDetails.value` shows the weighted reciprocal rank score. For `$scoreFusion`, the raw score is `inputPipelineRawScore`. Sources: https://www.mongodb.com/docs/vector-search/hybrid-search/vector-search-with-full-text-search.md — source: `~/.global-ai-hub/research/.pipeline/mongodb-2026-10-14/frb/fusion-score-normalization-strategies-4962cc7d2b/rabbithole-synthesis.md#core`
- [medium] The reciprocal rank fusion score is computed as the sum of (weight * (1 / (60 + rank))) across input pipelines, where 60 is a sensitivity parameter determined by MongoDB. Sources: https://www.mongodb.com/docs/manual/reference/operator/aggregation/rankFusion.md, https://www.mongodb.com/docs/vector-search/hybrid-search/vector-search-with-full-text-search.md — source: `~/.global-ai-hub/research/.pipeline/mongodb-2026-10-14/frb/fusion-score-normalization-strategies-4962cc7d2b/rabbithole-synthesis.md#core`
- [high] Reciprocal Rank Fusion (RRF) calculates the score as 1/(rank + k), where k is a constant (often 60), and the engine sums reciprocal rank scores from each search system to produce a combined score. Sources: https://weaviate.io/blog/hybrid-search-fusion-algorithms, https://learn.microsoft.com/azure/search/hybrid-search-ranking — source: `~/.global-ai-hub/research/.pipeline/mongodb-2026-10-14/frb/fusion-score-normalization-strategies-4962cc7d2b/rabbithole-synthesis.md#core`
- [low] A single outlier score can compress other scores into a narrow band, and the optimal blend between keyword and vector shifts from query to query, making static normalization challenging. Sources: https://redis.io/blog/reciprocal-rank-fusion/ — source: `~/.global-ai-hub/research/.pipeline/mongodb-2026-10-14/frb/fusion-score-normalization-strategies-4962cc7d2b/rabbithole-synthesis.md#antipatterns`
- [medium] The default combination method for `$scoreFusion` is `avg`, which averages the weighted scores, and the `score` expression computes a new value stored in the `$meta` keyword `score`. Sources: https://www.mongodb.com/docs/manual/reference/operator/aggregation/scoreFusion.md, https://www.mongodb.com/docs/vector-search/hybrid-search/hybrid-search-overview.md, https://www.mongodb.com/docs/manual/reference/operator/aggregation/score.md — source: `~/.global-ai-hub/research/.pipeline/mongodb-2026-10-14/frb/fusion-score-normalization-strategies-4962cc7d2b/rabbithole-synthesis.md#core`
- [medium] The `scoreDetails` option defaults to `false` in `$scoreFusion`, and if set to `true`, it creates a `scoreDetails` metadata field for each document, though it is not automatically output and must be explicitly set via `$meta`. Sources: https://www.mongodb.com/docs/search/query/score/get-details.md, https://www.mongodb.com/docs/manual/reference/operator/aggregation/scoreFusion.md — source: `~/.global-ai-hub/research/.pipeline/mongodb-2026-10-14/frb/fusion-score-normalization-strategies-4962cc7d2b/rabbithole-synthesis.md#core`
- [low] The `scoreDetails` option breaks down scoring factors to analyze why a document matched, with the top-level `value` equal to `$searchScore` and `description` showing the entire scoring formula. Sources: https://www.mongodb.com/docs/search/query/score/get-details.md — source: `~/.global-ai-hub/research/.pipeline/mongodb-2026-10-14/frb/fusion-score-normalization-strategies-4962cc7d2b/rabbithole-synthesis.md#core`
- [low] The `scoreDetails` option for `$score` defaults to `false` and, if true, computes and populates the `$scoreDetails` metadata field for each output document; this feature is new in version 8.2. (verified as of 2026-10-15) Sources: https://www.mongodb.com/docs/manual/reference/operator/aggregation/score.md — source: `~/.global-ai-hub/research/.pipeline/mongodb-2026-10-14/frb/fusion-score-normalization-strategies-4962cc7d2b/rabbithole-synthesis.md#core`
- [low] Elastic's linear retriever `minmax` normalizer uses score = (score - min) / (max - min). Sources: https://www.elastic.co/docs/reference/elasticsearch/rest-apis/retrievers/linear-retriever — source: `~/.global-ai-hub/research/.pipeline/mongodb-2026-10-14/frb/fusion-score-normalization-strategies-4962cc7d2b/rabbithole-synthesis.md#core`
- [low] In Elastic Stack, the `l2_norm` normalizer normalizes scores using the L2 norm and is generally available since version 9.1. (verified as of 2026-10-15) Sources: https://www.elastic.co/docs/reference/elasticsearch/rest-apis/retrievers/linear-retriever — source: `~/.global-ai-hub/research/.pipeline/mongodb-2026-10-14/frb/fusion-score-normalization-strategies-4962cc7d2b/rabbithole-synthesis.md#core`
- [low] The two-level normalization formula for ensuring equal contribution from semantic and lexical fields is Score_total = Normalizer(\sum_{s \in Semantic} Normalizer(Score_s)) + Normalizer(\sum_{l \in Lexical} Score_l). Sources: https://www.elastic.co/docs/reference/elasticsearch/rest-apis/retrievers/linear-retriever — source: `~/.global-ai-hub/research/.pipeline/mongodb-2026-10-14/frb/fusion-score-normalization-strategies-4962cc7d2b/rabbithole-synthesis.md#core`
- [low] Semantic ranking occurs after RRF merging of results, and the reranker score (`@search.rerankerScore`) is always reported separately in the query response. Sources: https://learn.microsoft.com/azure/search/hybrid-search-ranking — source: `~/.global-ai-hub/research/.pipeline/mongodb-2026-10-14/frb/fusion-score-normalization-strategies-4962cc7d2b/rabbithole-synthesis.md#core`
- [low] The resulting list after combining scores from multiple search systems is the fused ranking. Sources: https://learn.microsoft.com/azure/search/hybrid-search-ranking — source: `~/.global-ai-hub/research/.pipeline/mongodb-2026-10-14/frb/fusion-score-normalization-strategies-4962cc7d2b/rabbithole-synthesis.md#core`
- [low] In a methodology example, the `score` metadata field for Document1 is 0.0322664585, and its RRF score is calculated as 1/63 + 1/61. Sources: https://www.mongodb.com/docs/manual/reference/operator/aggregation/rankFusion.md — source: `~/.global-ai-hub/research/.pipeline/mongodb-2026-10-14/frb/fusion-score-normalization-strategies-4962cc7d2b/rabbithole-synthesis.md#methodology`

## Related concepts

- score — is a part of Fusion score normalization strategies
- normalization — is a part of Fusion score normalization strategies
- Fusion — is a part of Fusion score normalization strategies
