diff --git a/milli/src/search/new/ranking_rule_graph/exactness/mod.rs b/milli/src/search/new/ranking_rule_graph/exactness/mod.rs index 0842d6d04..0a84bf7cf 100644 --- a/milli/src/search/new/ranking_rule_graph/exactness/mod.rs +++ b/milli/src/search/new/ranking_rule_graph/exactness/mod.rs @@ -1,6 +1,7 @@ use roaring::RoaringBitmap; use super::{ComputedCondition, RankingRuleGraphTrait}; +use crate::score_details::{Rank, ScoreDetails}; use crate::search::new::interner::{DedupInterner, Interned}; use crate::search::new::query_term::{ExactTerm, LocatedQueryTermSubset}; use crate::search::new::resolve_query_graph::compute_query_term_subset_docids; @@ -84,4 +85,8 @@ impl RankingRuleGraphTrait for ExactnessGraph { Ok(vec![(0, exact_condition), (dest_node.term_ids.len() as u32, skip_condition)]) } + + fn rank_to_score(rank: Rank) -> ScoreDetails { + ScoreDetails::Exactness(rank) + } } diff --git a/milli/src/search/new/ranking_rule_graph/fid/mod.rs b/milli/src/search/new/ranking_rule_graph/fid/mod.rs index 4832aa532..8f3e0cc82 100644 --- a/milli/src/search/new/ranking_rule_graph/fid/mod.rs +++ b/milli/src/search/new/ranking_rule_graph/fid/mod.rs @@ -2,6 +2,7 @@ use fxhash::FxHashSet; use roaring::RoaringBitmap; use super::{ComputedCondition, RankingRuleGraphTrait}; +use crate::score_details::{Rank, ScoreDetails}; use crate::search::new::interner::{DedupInterner, Interned}; use crate::search::new::query_term::LocatedQueryTermSubset; use crate::search::new::resolve_query_graph::compute_query_term_subset_docids_within_field_id; @@ -102,4 +103,8 @@ impl RankingRuleGraphTrait for FidGraph { Ok(edges) } + + fn rank_to_score(rank: Rank) -> ScoreDetails { + ScoreDetails::Fid(rank) + } } diff --git a/milli/src/search/new/ranking_rule_graph/mod.rs b/milli/src/search/new/ranking_rule_graph/mod.rs index 8de455822..209ec91de 100644 --- a/milli/src/search/new/ranking_rule_graph/mod.rs +++ b/milli/src/search/new/ranking_rule_graph/mod.rs @@ -41,6 +41,7 @@ use super::interner::{DedupInterner, FixedSizeInterner, Interned, MappedInterner use super::query_term::LocatedQueryTermSubset; use super::small_bitmap::SmallBitmap; use super::{QueryGraph, QueryNode, SearchContext}; +use crate::score_details::{Rank, ScoreDetails}; use crate::Result; pub struct ComputedCondition { @@ -110,6 +111,9 @@ pub trait RankingRuleGraphTrait: Sized + 'static { source_node: Option<&LocatedQueryTermSubset>, dest_node: &LocatedQueryTermSubset, ) -> Result)>>; + + /// Convert the rank of a path to its corresponding score for the ranking rule + fn rank_to_score(rank: Rank) -> ScoreDetails; } /// The graph used by graph-based ranking rules. diff --git a/milli/src/search/new/ranking_rule_graph/position/mod.rs b/milli/src/search/new/ranking_rule_graph/position/mod.rs index c6fd3e302..646ff954a 100644 --- a/milli/src/search/new/ranking_rule_graph/position/mod.rs +++ b/milli/src/search/new/ranking_rule_graph/position/mod.rs @@ -2,6 +2,7 @@ use fxhash::{FxHashMap, FxHashSet}; use roaring::RoaringBitmap; use super::{ComputedCondition, RankingRuleGraphTrait}; +use crate::score_details::{Rank, ScoreDetails}; use crate::search::new::interner::{DedupInterner, Interned}; use crate::search::new::query_term::LocatedQueryTermSubset; use crate::search::new::resolve_query_graph::compute_query_term_subset_docids_within_position; @@ -115,6 +116,10 @@ impl RankingRuleGraphTrait for PositionGraph { Ok(edges) } + + fn rank_to_score(rank: Rank) -> ScoreDetails { + ScoreDetails::Position(rank) + } } fn cost_from_distance(distance: u32) -> u32 { diff --git a/milli/src/search/new/ranking_rule_graph/proximity/mod.rs b/milli/src/search/new/ranking_rule_graph/proximity/mod.rs index ead717a6f..532ace626 100644 --- a/milli/src/search/new/ranking_rule_graph/proximity/mod.rs +++ b/milli/src/search/new/ranking_rule_graph/proximity/mod.rs @@ -4,6 +4,7 @@ pub mod compute_docids; use roaring::RoaringBitmap; use super::{ComputedCondition, RankingRuleGraphTrait}; +use crate::score_details::{Rank, ScoreDetails}; use crate::search::new::interner::{DedupInterner, Interned}; use crate::search::new::query_term::LocatedQueryTermSubset; use crate::search::new::SearchContext; @@ -36,4 +37,8 @@ impl RankingRuleGraphTrait for ProximityGraph { ) -> Result)>> { build::build_edges(ctx, conditions_interner, source_term, dest_term) } + + fn rank_to_score(rank: Rank) -> ScoreDetails { + ScoreDetails::Proximity(rank) + } } diff --git a/milli/src/search/new/ranking_rule_graph/typo/mod.rs b/milli/src/search/new/ranking_rule_graph/typo/mod.rs index a44be6015..035106ac3 100644 --- a/milli/src/search/new/ranking_rule_graph/typo/mod.rs +++ b/milli/src/search/new/ranking_rule_graph/typo/mod.rs @@ -1,6 +1,7 @@ use roaring::RoaringBitmap; use super::{ComputedCondition, RankingRuleGraphTrait}; +use crate::score_details::{self, Rank, ScoreDetails}; use crate::search::new::interner::{DedupInterner, Interned}; use crate::search::new::query_term::LocatedQueryTermSubset; use crate::search::new::resolve_query_graph::compute_query_term_subset_docids; @@ -75,4 +76,8 @@ impl RankingRuleGraphTrait for TypoGraph { } Ok(edges) } + + fn rank_to_score(rank: Rank) -> ScoreDetails { + ScoreDetails::Typo(score_details::Typo::from_rank(rank)) + } } diff --git a/milli/src/search/new/ranking_rule_graph/words/mod.rs b/milli/src/search/new/ranking_rule_graph/words/mod.rs index 5b5ff5d08..45a56829f 100644 --- a/milli/src/search/new/ranking_rule_graph/words/mod.rs +++ b/milli/src/search/new/ranking_rule_graph/words/mod.rs @@ -1,6 +1,7 @@ use roaring::RoaringBitmap; use super::{ComputedCondition, RankingRuleGraphTrait}; +use crate::score_details::{self, Rank, ScoreDetails}; use crate::search::new::interner::{DedupInterner, Interned}; use crate::search::new::query_term::LocatedQueryTermSubset; use crate::search::new::resolve_query_graph::compute_query_term_subset_docids; @@ -43,4 +44,8 @@ impl RankingRuleGraphTrait for WordsGraph { ) -> Result)>> { Ok(vec![(0, conditions_interner.insert(WordsCondition { term: to_term.clone() }))]) } + + fn rank_to_score(rank: Rank) -> ScoreDetails { + ScoreDetails::Words(score_details::Words::from_rank(rank)) + } }