mirror of
https://github.com/meilisearch/meilisearch.git
synced 2025-07-28 01:01:00 +00:00
Choose implementation strategy of criterion at runtime
This commit is contained in:
@ -49,6 +49,7 @@ pub struct Search<'a> {
|
||||
authorize_typos: bool,
|
||||
words_limit: usize,
|
||||
exhaustive_number_hits: bool,
|
||||
criterion_implementation_strategy: CriterionImplementationStrategy,
|
||||
rtxn: &'a heed::RoTxn<'a>,
|
||||
index: &'a Index,
|
||||
}
|
||||
@ -65,6 +66,7 @@ impl<'a> Search<'a> {
|
||||
authorize_typos: true,
|
||||
exhaustive_number_hits: false,
|
||||
words_limit: 10,
|
||||
criterion_implementation_strategy: CriterionImplementationStrategy::default(),
|
||||
rtxn,
|
||||
index,
|
||||
}
|
||||
@ -117,6 +119,14 @@ impl<'a> Search<'a> {
|
||||
self
|
||||
}
|
||||
|
||||
pub fn criterion_implementation_strategy(
|
||||
&mut self,
|
||||
strategy: CriterionImplementationStrategy,
|
||||
) -> &mut Search<'a> {
|
||||
self.criterion_implementation_strategy = strategy;
|
||||
self
|
||||
}
|
||||
|
||||
fn is_typo_authorized(&self) -> Result<bool> {
|
||||
let index_authorizes_typos = self.index.authorize_typos(self.rtxn)?;
|
||||
// only authorize typos if both the index and the query allow it.
|
||||
@ -204,6 +214,7 @@ impl<'a> Search<'a> {
|
||||
self.sort_criteria.clone(),
|
||||
self.exhaustive_number_hits,
|
||||
None,
|
||||
self.criterion_implementation_strategy,
|
||||
)?;
|
||||
self.perform_sort(NoopDistinct, matching_words.unwrap_or_default(), criteria)
|
||||
}
|
||||
@ -220,6 +231,7 @@ impl<'a> Search<'a> {
|
||||
self.sort_criteria.clone(),
|
||||
self.exhaustive_number_hits,
|
||||
Some(distinct.clone()),
|
||||
self.criterion_implementation_strategy,
|
||||
)?;
|
||||
self.perform_sort(distinct, matching_words.unwrap_or_default(), criteria)
|
||||
}
|
||||
@ -288,6 +300,7 @@ impl fmt::Debug for Search<'_> {
|
||||
authorize_typos,
|
||||
words_limit,
|
||||
exhaustive_number_hits,
|
||||
criterion_implementation_strategy,
|
||||
rtxn: _,
|
||||
index: _,
|
||||
} = self;
|
||||
@ -300,6 +313,7 @@ impl fmt::Debug for Search<'_> {
|
||||
.field("terms_matching_strategy", terms_matching_strategy)
|
||||
.field("authorize_typos", authorize_typos)
|
||||
.field("exhaustive_number_hits", exhaustive_number_hits)
|
||||
.field("criterion_implementation_strategy", criterion_implementation_strategy)
|
||||
.field("words_limit", words_limit)
|
||||
.finish()
|
||||
}
|
||||
@ -313,6 +327,14 @@ pub struct SearchResult {
|
||||
pub documents_ids: Vec<DocumentId>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, Clone, Copy)]
|
||||
pub enum CriterionImplementationStrategy {
|
||||
OnlyIterative,
|
||||
OnlySetBased,
|
||||
#[default]
|
||||
Dynamic,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
pub enum TermsMatchingStrategy {
|
||||
// remove last word first
|
||||
|
Reference in New Issue
Block a user