Ranked and scored input pipeline eligibility
Parent: Atlas Hybrid Fusion and BM25 Diagnostics · Published reference · snapshot 2026-10-15 · viability 3.25 / 5 (research)
↓ Facts as markdownall context files
Depth-first rabbithole dossier for Ranked and scored input pipeline eligibility; source-anchored research pack.
These notes link each claim to its source. Some citations identify archived research reports that are no longer hosted on this site. A published reference means the content is available; it does not certify independent review or accuracy.Read the editorial policy and follow the sources before relying on a claim.
Definitions
- [low] In Weaviate, keyword search is based on the BM25F scoring algorithm and is called BM25 search. Sources: https://weaviate.io/blog/hybrid-search-fusion-algorithms [source]
Structure and components
- [low] Pipeline names must not start with a `$`, contain the ASCII null character `\0`, or contain a `.`. Sources: https://www.mongodb.com/docs/manual/reference/operator/aggregation/scoreFusion.md [source]
How it works
- [low] If an input pipeline does not inherently return a score, such as when using `$geoNear` which returns distance, it must include an explicit `$score` stage. Sources: https://www.mongodb.com/docs/manual/reference/operator/aggregation/scoreFusion.md [source]
- [low] In a hybrid query, `top` determines the number of results in the response, with the top 50 highest ranked matches returned by default. Sources: https://learn.microsoft.com/azure/search/hybrid-search-ranking [source]
- [low] For `$rankFusion`, the ticket says the `StageConstraints` on DocumentSourceRankFusion are likely unreachable code because constraints() is only called after desugaring. It does not state this as a general rule for all pipeline processing. Sources: https://jira.mongodb.org/browse/SERVER-101701 [source]
- [low] When you upgrade from MongoDB 8.0, you might have to pause executing `$rankFusion` queries. The statement that no further action is required for Free (M0) and Flex clusters belongs to the Automated Embedding auto-scaling prerequisites, not to the upgrade note. (verified as of 2026-10-15) Sources: https://www.mongodb.com/docs/vector-search/hybrid-search/hybrid-search-overview.md [source]
Problems, failure modes and limitations
- [low] Using `$nativeVectorSearch` in a `$scoreFusion` input pipeline is rejected with error code 12108713, and these rejections occur at parse/LP time without referencing shard names. Sources: https://jira.mongodb.org/browse/SERVER-117661 [source]
- [low] The `details` field in `$score` is an empty array because `$score` cannot take input pipelines. Sources: https://www.mongodb.com/docs/manual/reference/operator/aggregation/score.md [source]
- [medium] When using `$geoNear` in a selection pipeline, you cannot specify `includeLocs` or `distanceField` because those fields modify documents. Sources: https://www.mongodb.com/docs/manual/reference/operator/aggregation/scoreFusion.md, https://www.mongodb.com/docs/manual/reference/operator/aggregation/rankFusion.md [source]
- [low] By default, full-text search returns the top 50 highest ranking matches and is subject to a maximum limit of 1,000 matches, after which the engine stops looking for more. Sources: https://learn.microsoft.com/azure/search/hybrid-search-ranking [source]
- [low] RRF cannot distinguish between a #1 result with a score of 0.99 and one with 0.51, and its preference for consensus may cause a document loved by one retriever but ignored by another to lose to a document both merely liked. Sources: https://redis.io/blog/reciprocal-rank-fusion/ [source]
Comparisons and alternatives
- [medium] `$rankFusion` de-duplicates results so each unique document appears at most once, and sub-pipelines run serially rather than in parallel. Sources: https://www.mongodb.com/docs/manual/reference/operator/aggregation/rankFusion.md, https://www.mongodb.com/docs/vector-search/hybrid-search/hybrid-search-overview.md [source]
- [low] Atlas 8.0+ (8.1+ for native fusion) with Voyage AI integration, Python 3.11+, Node 18+, and uv are required, and an extra lexical index is needed because fusion stages require sub-pipelines on the same collection. (verified as of 2026-10-15) Sources: https://github.com/adrianofratelli-glitch/atlas-search-vs-vector-marketplace [source]
Facts and statements
- [medium] Input pipelines for `$rankFusion` and `$scoreFusion` must operate on the same collection, have unique names, and be both Selection and Ranked (or Scoring) Pipelines. Sources: https://www.mongodb.com/docs/manual/reference/operator/aggregation/scoreFusion.md, https://www.mongodb.com/docs/manual/reference/operator/aggregation/rankFusion.md, https://www.mongodb.com/docs/vector-search/hybrid-search/hybrid-search-overview.md [source]
- Fact 8 states input pipelines must be Scoring Pipelines, while Fact 15 states they must be Ranked Pipelines. Sources: https://www.mongodb.com/docs/manual/reference/operator/aggregation/scoreFusion.md, https://www.mongodb.com/docs/manual/reference/operator/aggregation/rankFusion.md [source]
- [low] A Selection Pipeline retrieves documents without modifications, while a Ranked Pipeline sorts or orders documents to influence `$rankFusion` output ranking. Sources: https://www.mongodb.com/docs/manual/reference/operator/aggregation/rankFusion.md [source]
- [medium] `$rankFusion` and `$scoreFusion` preserve a traceable link to the original input document and do not support certain modifications, requiring any document modifications to occur after the stage. Sources: https://www.mongodb.com/docs/manual/reference/operator/aggregation/rankFusion.md, https://www.mongodb.com/docs/vector-search/hybrid-search/hybrid-search-overview.md [source]
- [low] The final ranked result set is pruned to the search request's `size`, and either `query` or `retrievers` must be specified, but combining them is not supported. Sources: https://www.elastic.co/docs/reference/elasticsearch/rest-apis/retrievers/linear-retriever [source]
- [low] Validation for `$rankFusion` being the first stage may be bypassed if the first input pipeline is a custom-sorted pipeline without `$search`, `$vectorSearch`, or `$geoNear`, making `StageConstraints` potentially unreachable code. Sources: https://jira.mongodb.org/browse/SERVER-101701 [source]
- [medium] The `scoreDetails` option, which defaults to `false`, breaks down scoring factors to analyze why a document matched a query and received its score. Sources: https://www.mongodb.com/docs/search/query/score/get-details.md, https://www.mongodb.com/docs/manual/reference/operator/aggregation/score.md [source]
- [low] The `scoreDetails` object includes a `value` (float) representing the contribution to the score, a `description` (string) detailing the formula, and a recursive `details` array breaking down scores for each match. Sources: https://www.mongodb.com/docs/search/query/score/get-details.md [source]
- [low] The `rank_window_size` parameter defaults to 10, must be greater than or equal to `size` and `1`, and determines the number of results produced before merging based on weight and normalizer. Sources: https://www.elastic.co/docs/reference/elasticsearch/rest-apis/retrievers/linear-retriever [source]
- [low] Hybrid query execution counts include one full-text query plus vector queries: one vector query equals two executions, one vector query targeting two fields equals three, and two vector queries targeting five fields equals eleven executions. Sources: https://learn.microsoft.com/azure/search/hybrid-search-ranking [source]
- [low] Reciprocal Rank Fusion (RRF) combines ranked lists using only document positions, ignoring raw scores to avoid scale problems, as position #3 is consistent regardless of source. Sources: https://redis.io/blog/reciprocal-rank-fusion/ [source]
- [low] MongoDB recommends setting limits for the number of results returned by each sub-pipeline and using `$match` and `$sort` stages. Sources: https://www.mongodb.com/docs/vector-search/hybrid-search/hybrid-search-overview.md [source]
Related concepts
- and — is a part of Ranked and scored input pipeline eligibility
- pipeline — is a part of Ranked and scored input pipeline eligibility
- input — is a part of Ranked and scored input pipeline eligibility
- Ranked — is a part of Ranked and scored input pipeline eligibility
Children
- No children recorded.