mirror of
https://github.com/meilisearch/MeiliSearch
synced 2024-12-23 21:20:24 +01:00
Changes after review
This commit is contained in:
parent
c2fb7afe59
commit
2b6db6541e
@ -83,7 +83,7 @@ pub struct SearchQueryGet {
|
|||||||
pub hybrid_embedder: Option<String>,
|
pub hybrid_embedder: Option<String>,
|
||||||
#[deserr(default, error = DeserrQueryParamError<InvalidSearchSemanticRatio>)]
|
#[deserr(default, error = DeserrQueryParamError<InvalidSearchSemanticRatio>)]
|
||||||
pub hybrid_semantic_ratio: Option<SemanticRatioGet>,
|
pub hybrid_semantic_ratio: Option<SemanticRatioGet>,
|
||||||
#[deserr(default, error = DeserrQueryParamError<InvalidSearchRankingScoreThreshold>, default)]
|
#[deserr(default, error = DeserrQueryParamError<InvalidSearchRankingScoreThreshold>)]
|
||||||
pub ranking_score_threshold: Option<RankingScoreThresholdGet>,
|
pub ranking_score_threshold: Option<RankingScoreThresholdGet>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -709,7 +709,9 @@ fn prepare_search<'t>(
|
|||||||
) -> Result<(milli::Search<'t>, bool, usize, usize), MeilisearchHttpError> {
|
) -> Result<(milli::Search<'t>, bool, usize, usize), MeilisearchHttpError> {
|
||||||
let mut search = index.search(rtxn);
|
let mut search = index.search(rtxn);
|
||||||
search.time_budget(time_budget);
|
search.time_budget(time_budget);
|
||||||
search.ranking_score_threshold(query.ranking_score_threshold.map(|rst| rst.0));
|
if let Some(ranking_score_threshold) = query.ranking_score_threshold {
|
||||||
|
search.ranking_score_threshold(ranking_score_threshold.0);
|
||||||
|
}
|
||||||
|
|
||||||
match search_kind {
|
match search_kind {
|
||||||
SearchKind::KeywordOnly => {
|
SearchKind::KeywordOnly => {
|
||||||
|
@ -148,11 +148,8 @@ impl<'a> Search<'a> {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn ranking_score_threshold(
|
pub fn ranking_score_threshold(&mut self, ranking_score_threshold: f64) -> &mut Search<'a> {
|
||||||
&mut self,
|
self.ranking_score_threshold = Some(ranking_score_threshold);
|
||||||
ranking_score_threshold: Option<f64>,
|
|
||||||
) -> &mut Search<'a> {
|
|
||||||
self.ranking_score_threshold = ranking_score_threshold;
|
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,7 +145,6 @@ pub fn bucket_sort<'ctx, Q: RankingRuleQueryTrait>(
|
|||||||
ctx,
|
ctx,
|
||||||
from,
|
from,
|
||||||
length,
|
length,
|
||||||
ranking_score_threshold,
|
|
||||||
logger,
|
logger,
|
||||||
&mut valid_docids,
|
&mut valid_docids,
|
||||||
&mut valid_scores,
|
&mut valid_scores,
|
||||||
@ -167,6 +166,16 @@ pub fn bucket_sort<'ctx, Q: RankingRuleQueryTrait>(
|
|||||||
let bucket = std::mem::take(&mut ranking_rule_universes[cur_ranking_rule_index]);
|
let bucket = std::mem::take(&mut ranking_rule_universes[cur_ranking_rule_index]);
|
||||||
ranking_rule_scores.push(ScoreDetails::Skipped);
|
ranking_rule_scores.push(ScoreDetails::Skipped);
|
||||||
|
|
||||||
|
// remove candidates from the universe without adding them to result if their score is below the threshold
|
||||||
|
if let Some(ranking_score_threshold) = ranking_score_threshold {
|
||||||
|
let current_score = ScoreDetails::global_score(ranking_rule_scores.iter());
|
||||||
|
if current_score < ranking_score_threshold {
|
||||||
|
all_candidates -= bucket | &ranking_rule_universes[cur_ranking_rule_index];
|
||||||
|
back!();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
maybe_add_to_results!(bucket);
|
maybe_add_to_results!(bucket);
|
||||||
|
|
||||||
ranking_rule_scores.pop();
|
ranking_rule_scores.pop();
|
||||||
@ -225,6 +234,7 @@ pub fn bucket_sort<'ctx, Q: RankingRuleQueryTrait>(
|
|||||||
ranking_rule_universes[cur_ranking_rule_index].is_superset(&next_bucket.candidates)
|
ranking_rule_universes[cur_ranking_rule_index].is_superset(&next_bucket.candidates)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// remove candidates from the universe without adding them to result if their score is below the threshold
|
||||||
if let Some(ranking_score_threshold) = ranking_score_threshold {
|
if let Some(ranking_score_threshold) = ranking_score_threshold {
|
||||||
let current_score = ScoreDetails::global_score(ranking_rule_scores.iter());
|
let current_score = ScoreDetails::global_score(ranking_rule_scores.iter());
|
||||||
if current_score < ranking_score_threshold {
|
if current_score < ranking_score_threshold {
|
||||||
@ -277,7 +287,6 @@ fn maybe_add_to_results<'ctx, Q: RankingRuleQueryTrait>(
|
|||||||
ctx: &mut SearchContext<'ctx>,
|
ctx: &mut SearchContext<'ctx>,
|
||||||
from: usize,
|
from: usize,
|
||||||
length: usize,
|
length: usize,
|
||||||
ranking_score_threshold: Option<f64>,
|
|
||||||
logger: &mut dyn SearchLogger<Q>,
|
logger: &mut dyn SearchLogger<Q>,
|
||||||
|
|
||||||
valid_docids: &mut Vec<u32>,
|
valid_docids: &mut Vec<u32>,
|
||||||
@ -295,15 +304,6 @@ fn maybe_add_to_results<'ctx, Q: RankingRuleQueryTrait>(
|
|||||||
ranking_rule_scores: &[ScoreDetails],
|
ranking_rule_scores: &[ScoreDetails],
|
||||||
candidates: RoaringBitmap,
|
candidates: RoaringBitmap,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
// remove candidates from the universe without adding them to result if their score is below the threshold
|
|
||||||
if let Some(ranking_score_threshold) = ranking_score_threshold {
|
|
||||||
let score = ScoreDetails::global_score(ranking_rule_scores.iter());
|
|
||||||
if score < ranking_score_threshold {
|
|
||||||
*all_candidates -= candidates | &ranking_rule_universes[cur_ranking_rule_index];
|
|
||||||
return Ok(());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// First apply the distinct rule on the candidates, reducing the universes if necessary
|
// First apply the distinct rule on the candidates, reducing the universes if necessary
|
||||||
let candidates = if let Some(distinct_fid) = distinct_fid {
|
let candidates = if let Some(distinct_fid) = distinct_fid {
|
||||||
let DistinctOutput { remaining, excluded } =
|
let DistinctOutput { remaining, excluded } =
|
||||||
|
Loading…
x
Reference in New Issue
Block a user