From df0d9bb878c8660c3fc61e286b3e1950d0693f41 Mon Sep 17 00:00:00 2001 From: Kerollmops Date: Wed, 12 Apr 2023 12:01:50 +0200 Subject: [PATCH] Introduce the attribute ranking rule in the list of ranking rules --- milli/src/search/new/graph_based_ranking_rule.rs | 10 ++++++++-- milli/src/search/new/mod.rs | 8 ++++---- milli/src/search/new/ranking_rule_graph/mod.rs | 5 +++-- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/milli/src/search/new/graph_based_ranking_rule.rs b/milli/src/search/new/graph_based_ranking_rule.rs index 41a96dd9e..3ee16ed50 100644 --- a/milli/src/search/new/graph_based_ranking_rule.rs +++ b/milli/src/search/new/graph_based_ranking_rule.rs @@ -44,8 +44,8 @@ use super::interner::{Interned, MappedInterner}; use super::logger::SearchLogger; use super::query_graph::QueryNode; use super::ranking_rule_graph::{ - ConditionDocIdsCache, DeadEndsCache, ExactnessGraph, ProximityGraph, RankingRuleGraph, - RankingRuleGraphTrait, TypoGraph, + AttributeGraph, ConditionDocIdsCache, DeadEndsCache, ExactnessGraph, ProximityGraph, + RankingRuleGraph, RankingRuleGraphTrait, TypoGraph, }; use super::small_bitmap::SmallBitmap; use super::{QueryGraph, RankingRule, RankingRuleOutput, SearchContext}; @@ -59,6 +59,12 @@ impl GraphBasedRankingRule { Self::new_with_id("proximity".to_owned(), terms_matching_strategy) } } +pub type Attribute = GraphBasedRankingRule; +impl GraphBasedRankingRule { + pub fn new(terms_matching_strategy: Option) -> Self { + Self::new_with_id("attribute".to_owned(), terms_matching_strategy) + } +} pub type Typo = GraphBasedRankingRule; impl GraphBasedRankingRule { pub fn new(terms_matching_strategy: Option) -> Self { diff --git a/milli/src/search/new/mod.rs b/milli/src/search/new/mod.rs index 9f8d8699f..16eccb393 100644 --- a/milli/src/search/new/mod.rs +++ b/milli/src/search/new/mod.rs @@ -28,7 +28,7 @@ use std::collections::HashSet; use bucket_sort::bucket_sort; use charabia::TokenizerBuilder; use db_cache::DatabaseCache; -use graph_based_ranking_rule::{Proximity, Typo}; +use graph_based_ranking_rule::{Attribute, Proximity, Typo}; use heed::RoTxn; use interner::DedupInterner; pub use logger::visual::VisualSearchLogger; @@ -174,7 +174,7 @@ fn get_ranking_rules_for_query_graph_search<'ctx>( let mut typo = false; let mut proximity = false; let mut sort = false; - let attribute = false; + let mut attribute = false; let mut exactness = false; let mut asc = HashSet::new(); let mut desc = HashSet::new(); @@ -222,8 +222,8 @@ fn get_ranking_rules_for_query_graph_search<'ctx>( if attribute { continue; } - // todo!(); - // attribute = false; + attribute = true; + ranking_rules.push(Box::new(Attribute::new(None))); } crate::Criterion::Sort => { if sort { diff --git a/milli/src/search/new/ranking_rule_graph/mod.rs b/milli/src/search/new/ranking_rule_graph/mod.rs index cccc0643a..fe31029b4 100644 --- a/milli/src/search/new/ranking_rule_graph/mod.rs +++ b/milli/src/search/new/ranking_rule_graph/mod.rs @@ -10,17 +10,18 @@ mod cheapest_paths; mod condition_docids_cache; mod dead_ends_cache; +/// Implementation of the `attribute` ranking rule +mod attribute; /// Implementation of the `exactness` ranking rule mod exactness; /// Implementation of the `proximity` ranking rule mod proximity; /// Implementation of the `typo` ranking rule mod typo; -/// Implementation of the `attribute` ranking rule -mod attribute; use std::hash::Hash; +pub use attribute::{AttributeCondition, AttributeGraph}; pub use cheapest_paths::PathVisitor; pub use condition_docids_cache::ConditionDocIdsCache; pub use dead_ends_cache::DeadEndsCache;