3885: Exactness missing field r=dureuill a=dureuill

# Pull Request

Adds fields to score details that were [specified](c25d758264/text/0195-ranking-score.md (322-ranking-rule-specific-fields)), but missing in the implementation:

- `exactness.matchingWords`
- `exactness.maxMatchingWords` 


Co-authored-by: Louis Dureuil <louis@meilisearch.com>
This commit is contained in:
meili-bors[bot] 2023-07-04 15:14:53 +00:00 committed by GitHub
commit 377fe33aac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 503 additions and 467 deletions

View File

@ -10,7 +10,7 @@ pub enum ScoreDetails {
Fid(Rank), Fid(Rank),
Position(Rank), Position(Rank),
ExactAttribute(ExactAttribute), ExactAttribute(ExactAttribute),
Exactness(Rank), ExactWords(ExactWords),
Sort(Sort), Sort(Sort),
GeoSort(GeoSort), GeoSort(GeoSort),
} }
@ -28,7 +28,7 @@ impl ScoreDetails {
ScoreDetails::Fid(details) => Some(*details), ScoreDetails::Fid(details) => Some(*details),
ScoreDetails::Position(details) => Some(*details), ScoreDetails::Position(details) => Some(*details),
ScoreDetails::ExactAttribute(details) => Some(details.rank()), ScoreDetails::ExactAttribute(details) => Some(details.rank()),
ScoreDetails::Exactness(details) => Some(*details), ScoreDetails::ExactWords(details) => Some(details.rank()),
ScoreDetails::Sort(_) => None, ScoreDetails::Sort(_) => None,
ScoreDetails::GeoSort(_) => None, ScoreDetails::GeoSort(_) => None,
} }
@ -117,7 +117,7 @@ impl ScoreDetails {
details_map.insert("exactness".into(), exactness_details); details_map.insert("exactness".into(), exactness_details);
order += 1; order += 1;
} }
ScoreDetails::Exactness(details) => { ScoreDetails::ExactWords(details) => {
// For now, exactness is a virtual rule always preceded by the "ExactAttribute" rule // For now, exactness is a virtual rule always preceded by the "ExactAttribute" rule
let exactness_details = details_map let exactness_details = details_map
.get_mut("exactness") .get_mut("exactness")
@ -129,9 +129,16 @@ impl ScoreDetails {
== &serde_json::json!(ExactAttribute::NoExactMatch) == &serde_json::json!(ExactAttribute::NoExactMatch)
{ {
let score = Rank::global_score( let score = Rank::global_score(
[ExactAttribute::NoExactMatch.rank(), *details].iter().copied(), [ExactAttribute::NoExactMatch.rank(), details.rank()].iter().copied(),
); );
*exactness_details.get_mut("score").expect("missing score") = score.into(); // tiny detail, but we want the score to be the last displayed field,
// so we're removing it here, adding the other fields, then adding the new score
exactness_details.remove("score");
exactness_details
.insert("matchingWords".into(), details.matching_words.into());
exactness_details
.insert("maxMatchingWords".into(), details.max_matching_words.into());
exactness_details.insert("score".into(), score.into());
} }
// do not update the order since this was already done by exactAttribute // do not update the order since this was already done by exactAttribute
} }
@ -209,8 +216,34 @@ impl Words {
Rank { rank: self.matching_words, max_rank: self.max_matching_words } Rank { rank: self.matching_words, max_rank: self.max_matching_words }
} }
pub(crate) fn from_rank(rank: Rank) -> Words { pub(crate) fn from_rank(rank: Rank) -> Self {
Words { matching_words: rank.rank, max_matching_words: rank.max_rank } Self { matching_words: rank.rank, max_matching_words: rank.max_rank }
}
}
/// Structure that is super similar to [`Words`], but whose semantics is a bit distinct.
///
/// In exactness, the number of matching words can actually be 0 with a non-zero score,
/// if no words from the query appear exactly in the document.
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct ExactWords {
pub matching_words: u32,
pub max_matching_words: u32,
}
impl ExactWords {
pub fn rank(&self) -> Rank {
// 0 matching words means last rank (1)
Rank { rank: self.matching_words + 1, max_rank: self.max_matching_words + 1 }
}
pub(crate) fn from_rank(rank: Rank) -> Self {
// last rank (1) means that 0 words from the query appear exactly in the document.
// first rank (max_rank) means that (max_rank - 1) words from the query appear exactly in the document.
Self {
matching_words: rank.rank.saturating_sub(1),
max_matching_words: rank.max_rank.saturating_sub(1),
}
} }
} }
@ -223,7 +256,7 @@ pub struct Typo {
impl Typo { impl Typo {
pub fn rank(&self) -> Rank { pub fn rank(&self) -> Rank {
Rank { Rank {
rank: self.max_typo_count - self.typo_count + 1, rank: (self.max_typo_count + 1).saturating_sub(self.typo_count),
max_rank: (self.max_typo_count + 1), max_rank: (self.max_typo_count + 1),
} }
} }
@ -236,7 +269,10 @@ impl Typo {
// rank + typo = max_rank // rank + typo = max_rank
// typo = max_rank - rank // typo = max_rank - rank
pub fn from_rank(rank: Rank) -> Typo { pub fn from_rank(rank: Rank) -> Typo {
Typo { typo_count: rank.max_rank - rank.rank, max_typo_count: rank.max_rank - 1 } Typo {
typo_count: rank.max_rank.saturating_sub(rank.rank),
max_typo_count: rank.max_rank.saturating_sub(1),
}
} }
} }

View File

@ -1,7 +1,7 @@
use roaring::RoaringBitmap; use roaring::RoaringBitmap;
use super::{ComputedCondition, RankingRuleGraphTrait}; use super::{ComputedCondition, RankingRuleGraphTrait};
use crate::score_details::{Rank, ScoreDetails}; use crate::score_details::{self, Rank, ScoreDetails};
use crate::search::new::interner::{DedupInterner, Interned}; use crate::search::new::interner::{DedupInterner, Interned};
use crate::search::new::query_term::{ExactTerm, LocatedQueryTermSubset}; use crate::search::new::query_term::{ExactTerm, LocatedQueryTermSubset};
use crate::search::new::resolve_query_graph::compute_query_term_subset_docids; use crate::search::new::resolve_query_graph::compute_query_term_subset_docids;
@ -87,6 +87,6 @@ impl RankingRuleGraphTrait for ExactnessGraph {
} }
fn rank_to_score(rank: Rank) -> ScoreDetails { fn rank_to_score(rank: Rank) -> ScoreDetails {
ScoreDetails::Exactness(rank) ScoreDetails::ExactWords(score_details::ExactWords::from_rank(rank))
} }
} }

View File

@ -15,10 +15,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 10, matching_words: 9,
max_rank: 10, max_matching_words: 9,
}, },
), ),
], ],
@ -35,10 +35,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 7, matching_words: 6,
max_rank: 10, max_matching_words: 9,
}, },
), ),
], ],
@ -55,10 +55,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 9, matching_words: 8,
max_rank: 9, max_matching_words: 8,
}, },
), ),
], ],
@ -75,10 +75,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 6, matching_words: 5,
max_rank: 9, max_matching_words: 8,
}, },
), ),
], ],
@ -95,10 +95,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 8, matching_words: 7,
max_rank: 8, max_matching_words: 7,
}, },
), ),
], ],
@ -115,10 +115,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 8, matching_words: 7,
max_rank: 8, max_matching_words: 7,
}, },
), ),
], ],
@ -135,10 +135,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 5, matching_words: 4,
max_rank: 8, max_matching_words: 7,
}, },
), ),
], ],
@ -155,10 +155,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 5, matching_words: 4,
max_rank: 8, max_matching_words: 7,
}, },
), ),
], ],
@ -175,10 +175,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 6, matching_words: 5,
max_rank: 6, max_matching_words: 5,
}, },
), ),
], ],
@ -195,10 +195,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 3, matching_words: 2,
max_rank: 6, max_matching_words: 5,
}, },
), ),
], ],
@ -215,10 +215,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 5, matching_words: 4,
max_rank: 5, max_matching_words: 4,
}, },
), ),
], ],
@ -235,10 +235,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 3, matching_words: 2,
max_rank: 5, max_matching_words: 4,
}, },
), ),
], ],
@ -255,10 +255,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 4, matching_words: 3,
max_rank: 4, max_matching_words: 3,
}, },
), ),
], ],
@ -275,10 +275,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 2, matching_words: 1,
max_rank: 4, max_matching_words: 3,
}, },
), ),
], ],
@ -295,10 +295,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 3, matching_words: 2,
max_rank: 3, max_matching_words: 2,
}, },
), ),
], ],
@ -315,10 +315,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 2, matching_words: 1,
max_rank: 3, max_matching_words: 2,
}, },
), ),
], ],
@ -335,10 +335,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 2, matching_words: 1,
max_rank: 2, max_matching_words: 1,
}, },
), ),
], ],
@ -355,10 +355,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 2, matching_words: 1,
max_rank: 2, max_matching_words: 1,
}, },
), ),
], ],

View File

@ -15,10 +15,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 7, matching_words: 6,
max_rank: 8, max_matching_words: 7,
}, },
), ),
], ],
@ -35,10 +35,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 7, matching_words: 6,
max_rank: 8, max_matching_words: 7,
}, },
), ),
], ],
@ -55,10 +55,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 7, matching_words: 6,
max_rank: 8, max_matching_words: 7,
}, },
), ),
], ],
@ -75,10 +75,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 4, matching_words: 3,
max_rank: 5, max_matching_words: 4,
}, },
), ),
], ],
@ -95,10 +95,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 1, matching_words: 0,
max_rank: 2, max_matching_words: 1,
}, },
), ),
], ],

View File

@ -15,10 +15,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 8, matching_words: 7,
max_rank: 8, max_matching_words: 7,
}, },
), ),
], ],
@ -35,10 +35,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
MatchesStart, MatchesStart,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 8, matching_words: 7,
max_rank: 8, max_matching_words: 7,
}, },
), ),
], ],
@ -55,10 +55,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 8, matching_words: 7,
max_rank: 8, max_matching_words: 7,
}, },
), ),
], ],
@ -75,10 +75,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 7, matching_words: 6,
max_rank: 8, max_matching_words: 7,
}, },
), ),
], ],
@ -95,10 +95,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 5, matching_words: 4,
max_rank: 5, max_matching_words: 4,
}, },
), ),
], ],
@ -115,10 +115,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 2, matching_words: 1,
max_rank: 2, max_matching_words: 1,
}, },
), ),
], ],

View File

@ -15,10 +15,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 6, matching_words: 5,
max_rank: 6, max_matching_words: 5,
}, },
), ),
], ],
@ -35,10 +35,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
MatchesStart, MatchesStart,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 6, matching_words: 5,
max_rank: 6, max_matching_words: 5,
}, },
), ),
], ],
@ -55,10 +55,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 6, matching_words: 5,
max_rank: 6, max_matching_words: 5,
}, },
), ),
], ],
@ -75,10 +75,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 3, matching_words: 2,
max_rank: 3, max_matching_words: 2,
}, },
), ),
], ],

View File

@ -15,10 +15,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 3, matching_words: 2,
max_rank: 3, max_matching_words: 2,
}, },
), ),
], ],
@ -35,10 +35,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
MatchesStart, MatchesStart,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 3, matching_words: 2,
max_rank: 3, max_matching_words: 2,
}, },
), ),
], ],
@ -55,10 +55,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 3, matching_words: 2,
max_rank: 3, max_matching_words: 2,
}, },
), ),
], ],

View File

@ -15,10 +15,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 5, matching_words: 4,
max_rank: 5, max_matching_words: 4,
}, },
), ),
Typo( Typo(
@ -41,10 +41,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 4, matching_words: 3,
max_rank: 5, max_matching_words: 4,
}, },
), ),
Typo( Typo(
@ -67,10 +67,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 4, matching_words: 3,
max_rank: 5, max_matching_words: 4,
}, },
), ),
Typo( Typo(
@ -93,10 +93,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 4, matching_words: 3,
max_rank: 5, max_matching_words: 4,
}, },
), ),
Typo( Typo(
@ -119,10 +119,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 3, matching_words: 2,
max_rank: 5, max_matching_words: 4,
}, },
), ),
Typo( Typo(

View File

@ -15,10 +15,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 10, matching_words: 9,
max_rank: 10, max_matching_words: 9,
}, },
), ),
], ],
@ -35,10 +35,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 9, matching_words: 8,
max_rank: 9, max_matching_words: 8,
}, },
), ),
], ],
@ -55,10 +55,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 8, matching_words: 7,
max_rank: 8, max_matching_words: 7,
}, },
), ),
], ],
@ -75,10 +75,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 8, matching_words: 7,
max_rank: 8, max_matching_words: 7,
}, },
), ),
], ],
@ -95,10 +95,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 6, matching_words: 5,
max_rank: 6, max_matching_words: 5,
}, },
), ),
], ],
@ -115,10 +115,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 5, matching_words: 4,
max_rank: 5, max_matching_words: 4,
}, },
), ),
], ],
@ -135,10 +135,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 4, matching_words: 3,
max_rank: 4, max_matching_words: 3,
}, },
), ),
], ],
@ -155,10 +155,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 3, matching_words: 2,
max_rank: 3, max_matching_words: 2,
}, },
), ),
], ],
@ -175,10 +175,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 2, matching_words: 1,
max_rank: 2, max_matching_words: 1,
}, },
), ),
], ],

View File

@ -15,10 +15,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 10, matching_words: 9,
max_rank: 10, max_matching_words: 9,
}, },
), ),
], ],
@ -35,10 +35,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 4, matching_words: 3,
max_rank: 4, max_matching_words: 3,
}, },
), ),
], ],
@ -55,10 +55,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 3, matching_words: 2,
max_rank: 3, max_matching_words: 2,
}, },
), ),
], ],
@ -75,10 +75,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 3, matching_words: 2,
max_rank: 3, max_matching_words: 2,
}, },
), ),
], ],
@ -95,10 +95,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 2, matching_words: 1,
max_rank: 2, max_matching_words: 1,
}, },
), ),
], ],
@ -115,10 +115,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 2, matching_words: 1,
max_rank: 2, max_matching_words: 1,
}, },
), ),
], ],

View File

@ -15,10 +15,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 10, matching_words: 9,
max_rank: 10, max_matching_words: 9,
}, },
), ),
], ],
@ -35,10 +35,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 10, matching_words: 9,
max_rank: 10, max_matching_words: 9,
}, },
), ),
], ],
@ -55,10 +55,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
MatchesStart, MatchesStart,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 2, matching_words: 1,
max_rank: 2, max_matching_words: 1,
}, },
), ),
], ],
@ -75,10 +75,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 2, matching_words: 1,
max_rank: 2, max_matching_words: 1,
}, },
), ),
], ],
@ -95,10 +95,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 2, matching_words: 1,
max_rank: 2, max_matching_words: 1,
}, },
), ),
], ],
@ -115,10 +115,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 2, matching_words: 1,
max_rank: 2, max_matching_words: 1,
}, },
), ),
], ],
@ -135,10 +135,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 2, matching_words: 1,
max_rank: 2, max_matching_words: 1,
}, },
), ),
], ],

View File

@ -15,10 +15,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 10, matching_words: 9,
max_rank: 10, max_matching_words: 9,
}, },
), ),
], ],
@ -35,10 +35,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 10, matching_words: 9,
max_rank: 10, max_matching_words: 9,
}, },
), ),
], ],
@ -55,10 +55,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
MatchesStart, MatchesStart,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 2, matching_words: 1,
max_rank: 2, max_matching_words: 1,
}, },
), ),
], ],
@ -75,10 +75,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 2, matching_words: 1,
max_rank: 2, max_matching_words: 1,
}, },
), ),
], ],
@ -95,10 +95,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 2, matching_words: 1,
max_rank: 2, max_matching_words: 1,
}, },
), ),
], ],
@ -115,10 +115,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 2, matching_words: 1,
max_rank: 2, max_matching_words: 1,
}, },
), ),
], ],
@ -135,10 +135,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 2, matching_words: 1,
max_rank: 2, max_matching_words: 1,
}, },
), ),
], ],

View File

@ -15,10 +15,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 10, matching_words: 9,
max_rank: 10, max_matching_words: 9,
}, },
), ),
Proximity( Proximity(
@ -41,10 +41,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 10, matching_words: 9,
max_rank: 10, max_matching_words: 9,
}, },
), ),
Proximity( Proximity(
@ -67,10 +67,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 10, matching_words: 9,
max_rank: 10, max_matching_words: 9,
}, },
), ),
Proximity( Proximity(

View File

@ -15,10 +15,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 10, matching_words: 9,
max_rank: 10, max_matching_words: 9,
}, },
), ),
Proximity( Proximity(
@ -41,10 +41,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 10, matching_words: 9,
max_rank: 10, max_matching_words: 9,
}, },
), ),
Proximity( Proximity(
@ -67,10 +67,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 10, matching_words: 9,
max_rank: 10, max_matching_words: 9,
}, },
), ),
Proximity( Proximity(
@ -93,10 +93,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
MatchesStart, MatchesStart,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 5, matching_words: 4,
max_rank: 5, max_matching_words: 4,
}, },
), ),
Proximity( Proximity(
@ -119,10 +119,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
MatchesStart, MatchesStart,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 5, matching_words: 4,
max_rank: 5, max_matching_words: 4,
}, },
), ),
Proximity( Proximity(
@ -145,10 +145,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
MatchesStart, MatchesStart,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 5, matching_words: 4,
max_rank: 5, max_matching_words: 4,
}, },
), ),
Proximity( Proximity(
@ -171,10 +171,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 5, matching_words: 4,
max_rank: 5, max_matching_words: 4,
}, },
), ),
Proximity( Proximity(
@ -197,10 +197,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 5, matching_words: 4,
max_rank: 5, max_matching_words: 4,
}, },
), ),
Proximity( Proximity(
@ -223,10 +223,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 5, matching_words: 4,
max_rank: 5, max_matching_words: 4,
}, },
), ),
Proximity( Proximity(

View File

@ -21,10 +21,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 5, matching_words: 4,
max_rank: 5, max_matching_words: 4,
}, },
), ),
], ],
@ -47,10 +47,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 4, matching_words: 3,
max_rank: 5, max_matching_words: 4,
}, },
), ),
], ],
@ -73,10 +73,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 4, matching_words: 3,
max_rank: 5, max_matching_words: 4,
}, },
), ),
], ],
@ -99,10 +99,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 3, matching_words: 2,
max_rank: 5, max_matching_words: 4,
}, },
), ),
], ],

View File

@ -15,10 +15,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 10, matching_words: 9,
max_rank: 10, max_matching_words: 9,
}, },
), ),
], ],
@ -35,10 +35,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 7, matching_words: 6,
max_rank: 10, max_matching_words: 9,
}, },
), ),
], ],
@ -55,10 +55,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 9, matching_words: 8,
max_rank: 9, max_matching_words: 8,
}, },
), ),
], ],
@ -75,10 +75,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 6, matching_words: 5,
max_rank: 9, max_matching_words: 8,
}, },
), ),
], ],
@ -95,10 +95,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 8, matching_words: 7,
max_rank: 8, max_matching_words: 7,
}, },
), ),
], ],
@ -115,10 +115,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 8, matching_words: 7,
max_rank: 8, max_matching_words: 7,
}, },
), ),
], ],
@ -135,10 +135,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 5, matching_words: 4,
max_rank: 8, max_matching_words: 7,
}, },
), ),
], ],
@ -155,10 +155,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 5, matching_words: 4,
max_rank: 8, max_matching_words: 7,
}, },
), ),
], ],
@ -175,10 +175,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 6, matching_words: 5,
max_rank: 6, max_matching_words: 5,
}, },
), ),
], ],
@ -195,10 +195,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 3, matching_words: 2,
max_rank: 6, max_matching_words: 5,
}, },
), ),
], ],
@ -215,10 +215,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 5, matching_words: 4,
max_rank: 5, max_matching_words: 4,
}, },
), ),
], ],
@ -235,10 +235,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 3, matching_words: 2,
max_rank: 5, max_matching_words: 4,
}, },
), ),
], ],
@ -255,10 +255,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 4, matching_words: 3,
max_rank: 4, max_matching_words: 3,
}, },
), ),
], ],
@ -275,10 +275,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 2, matching_words: 1,
max_rank: 4, max_matching_words: 3,
}, },
), ),
], ],
@ -295,10 +295,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 3, matching_words: 2,
max_rank: 3, max_matching_words: 2,
}, },
), ),
], ],
@ -315,10 +315,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 2, matching_words: 1,
max_rank: 3, max_matching_words: 2,
}, },
), ),
], ],
@ -335,10 +335,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 2, matching_words: 1,
max_rank: 2, max_matching_words: 1,
}, },
), ),
], ],
@ -355,10 +355,10 @@ expression: "format!(\"{document_ids_scores:#?}\")"
ExactAttribute( ExactAttribute(
ExactMatch, ExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 2, matching_words: 1,
max_rank: 2, max_matching_words: 1,
}, },
), ),
], ],

View File

@ -37,10 +37,10 @@ expression: "format!(\"{document_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 4, matching_words: 3,
max_rank: 4, max_matching_words: 3,
}, },
), ),
], ],
@ -78,10 +78,10 @@ expression: "format!(\"{document_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 4, matching_words: 3,
max_rank: 4, max_matching_words: 3,
}, },
), ),
], ],
@ -119,10 +119,10 @@ expression: "format!(\"{document_scores:#?}\")"
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 4, matching_words: 3,
max_rank: 4, max_matching_words: 3,
}, },
), ),
], ],

View File

@ -120,10 +120,10 @@ fn test_ignore_stop_words() {
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 2, matching_words: 1,
max_rank: 2, max_matching_words: 1,
}, },
), ),
], ],
@ -173,10 +173,10 @@ fn test_ignore_stop_words() {
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 2, matching_words: 1,
max_rank: 2, max_matching_words: 1,
}, },
), ),
], ],
@ -226,10 +226,10 @@ fn test_ignore_stop_words() {
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 2, matching_words: 1,
max_rank: 2, max_matching_words: 1,
}, },
), ),
], ],
@ -278,10 +278,10 @@ fn test_ignore_stop_words() {
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 3, matching_words: 2,
max_rank: 3, max_matching_words: 2,
}, },
), ),
], ],
@ -337,10 +337,10 @@ fn test_stop_words_in_phrase() {
ExactAttribute( ExactAttribute(
MatchesStart, MatchesStart,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 2, matching_words: 1,
max_rank: 2, max_matching_words: 1,
}, },
), ),
], ],
@ -378,10 +378,10 @@ fn test_stop_words_in_phrase() {
ExactAttribute( ExactAttribute(
MatchesStart, MatchesStart,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 2, matching_words: 1,
max_rank: 2, max_matching_words: 1,
}, },
), ),
], ],
@ -430,10 +430,10 @@ fn test_stop_words_in_phrase() {
ExactAttribute( ExactAttribute(
NoExactMatch, NoExactMatch,
), ),
Exactness( ExactWords(
Rank { ExactWords {
rank: 4, matching_words: 3,
max_rank: 4, max_matching_words: 3,
}, },
), ),
], ],