diff --git a/milli/src/search/criteria/attribute.rs b/milli/src/search/criteria/attribute.rs index 6e0bb40d5..5eb1311a1 100644 --- a/milli/src/search/criteria/attribute.rs +++ b/milli/src/search/criteria/attribute.rs @@ -192,7 +192,9 @@ impl<'t, 'q> WordLevelIterator<'t, 'q> { in_prefix_cache: bool, ) -> heed::Result> { match ctx.word_position_last_level(&word, in_prefix_cache)? { - Some(level) => { + Some(_) => { + // HOTFIX Meilisearch#1707: it is better to only iterate over level 0 for performances reasons. + let level = TreeLevel::min_value(); let interval_size = LEVEL_EXPONENTIATION_BASE.pow(Into::::into(level) as u32); let inner = ctx.word_position_iterator(&word, level, in_prefix_cache, None, None)?; @@ -528,10 +530,10 @@ impl<'t, 'q> Branch<'t, 'q> { fn cmp(&self, other: &Self) -> Ordering { let self_rank = self.compute_rank(); let other_rank = other.compute_rank(); - let left_cmp = self_rank.cmp(&other_rank).reverse(); + let left_cmp = self_rank.cmp(&other_rank); // on level: lower is better, // we want to dig faster into levels on interesting branches. - let level_cmp = self.tree_level.cmp(&other.tree_level).reverse(); + let level_cmp = self.tree_level.cmp(&other.tree_level); left_cmp.then(level_cmp).then(self.last_result.2.len().cmp(&other.last_result.2.len())) }