BoxRankingRule

This commit is contained in:
Louis Dureuil 2023-03-28 12:39:42 +02:00
parent 8d7d8cdc2f
commit b4a52a622e
No known key found for this signature in database
4 changed files with 13 additions and 9 deletions

View File

@ -13,6 +13,7 @@ use crate::search::new::ranking_rule_graph::{
DeadEndsCache, Edge, ProximityCondition, ProximityGraph, RankingRuleGraph, DeadEndsCache, Edge, ProximityCondition, ProximityGraph, RankingRuleGraph,
RankingRuleGraphTrait, TypoCondition, TypoGraph, RankingRuleGraphTrait, TypoCondition, TypoGraph,
}; };
use crate::search::new::ranking_rules::BoxRankingRule;
use crate::search::new::{QueryGraph, QueryNode, RankingRule, SearchContext, SearchLogger}; use crate::search::new::{QueryGraph, QueryNode, RankingRule, SearchContext, SearchLogger};
pub enum SearchEvents { pub enum SearchEvents {
@ -98,7 +99,7 @@ impl SearchLogger<QueryGraph> for DetailedSearchLogger {
fn initial_universe(&mut self, universe: &RoaringBitmap) { fn initial_universe(&mut self, universe: &RoaringBitmap) {
self.initial_universe = Some(universe.clone()); self.initial_universe = Some(universe.clone());
} }
fn ranking_rules(&mut self, rr: &[Box<dyn RankingRule<QueryGraph>>]) { fn ranking_rules(&mut self, rr: &[BoxRankingRule<QueryGraph>]) {
self.ranking_rules_ids = Some(rr.iter().map(|rr| rr.id()).collect()); self.ranking_rules_ids = Some(rr.iter().map(|rr| rr.id()).collect());
} }

View File

@ -8,6 +8,7 @@ use super::query_graph::QueryNode;
use super::ranking_rule_graph::{ use super::ranking_rule_graph::{
DeadEndsCache, ProximityCondition, ProximityGraph, RankingRuleGraph, TypoCondition, TypoGraph, DeadEndsCache, ProximityCondition, ProximityGraph, RankingRuleGraph, TypoCondition, TypoGraph,
}; };
use super::ranking_rules::BoxRankingRule;
use super::{RankingRule, RankingRuleQueryTrait}; use super::{RankingRule, RankingRuleQueryTrait};
/// Trait for structure logging the execution of a search query. /// Trait for structure logging the execution of a search query.
@ -22,7 +23,7 @@ pub trait SearchLogger<Q: RankingRuleQueryTrait> {
fn initial_universe(&mut self, universe: &RoaringBitmap); fn initial_universe(&mut self, universe: &RoaringBitmap);
/// Logs the ranking rules used to perform the search query /// Logs the ranking rules used to perform the search query
fn ranking_rules(&mut self, rr: &[Box<dyn RankingRule<Q>>]); fn ranking_rules(&mut self, rr: &[BoxRankingRule<Q>]);
/// Logs the start of a ranking rule's iteration. /// Logs the start of a ranking rule's iteration.
fn start_iteration_ranking_rule( fn start_iteration_ranking_rule(
@ -93,7 +94,7 @@ impl<Q: RankingRuleQueryTrait> SearchLogger<Q> for DefaultSearchLogger {
fn initial_universe(&mut self, _universe: &RoaringBitmap) {} fn initial_universe(&mut self, _universe: &RoaringBitmap) {}
fn ranking_rules(&mut self, _rr: &[Box<dyn RankingRule<Q>>]) {} fn ranking_rules(&mut self, _rr: &[BoxRankingRule<Q>]) {}
fn start_iteration_ranking_rule( fn start_iteration_ranking_rule(
&mut self, &mut self,

View File

@ -32,7 +32,7 @@ use resolve_query_graph::{resolve_query_graph, QueryTermDocIdsCache};
use roaring::RoaringBitmap; use roaring::RoaringBitmap;
use words::Words; use words::Words;
use self::ranking_rules::RankingRule; use self::ranking_rules::{BoxRankingRule, RankingRule};
use crate::{Filter, Index, MatchingWords, Result, SearchResult, TermsMatchingStrategy}; use crate::{Filter, Index, MatchingWords, Result, SearchResult, TermsMatchingStrategy};
/// A structure used throughout the execution of a search query. /// A structure used throughout the execution of a search query.
@ -106,11 +106,11 @@ fn resolve_maximally_reduced_query_graph(
/// Return the list of initialised ranking rules to be used for a placeholder search. /// Return the list of initialised ranking rules to be used for a placeholder search.
fn get_ranking_rules_for_placeholder_search<'ctx>( fn get_ranking_rules_for_placeholder_search<'ctx>(
ctx: &SearchContext<'ctx>, ctx: &SearchContext<'ctx>,
) -> Result<Vec<Box<dyn RankingRule<'ctx, PlaceholderQuery>>>> { ) -> Result<Vec<BoxRankingRule<'ctx, PlaceholderQuery>>> {
// let sort = false; // let sort = false;
// let mut asc = HashSet::new(); // let mut asc = HashSet::new();
// let mut desc = HashSet::new(); // let mut desc = HashSet::new();
let /*mut*/ ranking_rules: Vec<Box<dyn RankingRule<PlaceholderQuery>>> = vec![]; let /*mut*/ ranking_rules: Vec<BoxRankingRule<PlaceholderQuery>> = vec![];
let settings_ranking_rules = ctx.index.criteria(ctx.txn)?; let settings_ranking_rules = ctx.index.criteria(ctx.txn)?;
for rr in settings_ranking_rules { for rr in settings_ranking_rules {
// Add Words before any of: typo, proximity, attribute, exactness // Add Words before any of: typo, proximity, attribute, exactness
@ -132,7 +132,7 @@ fn get_ranking_rules_for_placeholder_search<'ctx>(
fn get_ranking_rules_for_query_graph_search<'ctx>( fn get_ranking_rules_for_query_graph_search<'ctx>(
ctx: &SearchContext<'ctx>, ctx: &SearchContext<'ctx>,
terms_matching_strategy: TermsMatchingStrategy, terms_matching_strategy: TermsMatchingStrategy,
) -> Result<Vec<Box<dyn RankingRule<'ctx, QueryGraph>>>> { ) -> Result<Vec<BoxRankingRule<'ctx, QueryGraph>>> {
// query graph search // query graph search
let mut words = false; let mut words = false;
let mut typo = false; let mut typo = false;
@ -143,7 +143,7 @@ fn get_ranking_rules_for_query_graph_search<'ctx>(
let mut asc = HashSet::new(); let mut asc = HashSet::new();
let mut desc = HashSet::new(); let mut desc = HashSet::new();
let mut ranking_rules: Vec<Box<dyn RankingRule<QueryGraph>>> = vec![]; let mut ranking_rules: Vec<BoxRankingRule<QueryGraph>> = vec![];
let settings_ranking_rules = ctx.index.criteria(ctx.txn)?; let settings_ranking_rules = ctx.index.criteria(ctx.txn)?;
for rr in settings_ranking_rules { for rr in settings_ranking_rules {
// Add Words before any of: typo, proximity, attribute, exactness // Add Words before any of: typo, proximity, attribute, exactness

View File

@ -15,6 +15,8 @@ pub struct PlaceholderQuery;
impl RankingRuleQueryTrait for PlaceholderQuery {} impl RankingRuleQueryTrait for PlaceholderQuery {}
impl RankingRuleQueryTrait for QueryGraph {} impl RankingRuleQueryTrait for QueryGraph {}
pub type BoxRankingRule<'ctx, Query> = Box<dyn RankingRule<'ctx, Query> + 'ctx>;
/// A trait that must be implemented by all ranking rules. /// A trait that must be implemented by all ranking rules.
/// ///
/// It is generic over `'ctx`, the lifetime of the search context /// It is generic over `'ctx`, the lifetime of the search context
@ -70,7 +72,7 @@ pub struct RankingRuleOutput<Q> {
pub fn bucket_sort<'ctx, Q: RankingRuleQueryTrait>( pub fn bucket_sort<'ctx, Q: RankingRuleQueryTrait>(
ctx: &mut SearchContext<'ctx>, ctx: &mut SearchContext<'ctx>,
mut ranking_rules: Vec<Box<dyn RankingRule<'ctx, Q>>>, mut ranking_rules: Vec<BoxRankingRule<'ctx, Q>>,
query: &Q, query: &Q,
universe: &RoaringBitmap, universe: &RoaringBitmap,
from: usize, from: usize,