mirror of
https://github.com/meilisearch/meilisearch.git
synced 2025-07-31 10:50:03 +00:00
Intern ranking rule graph edge conditions as well
This commit is contained in:
@ -3,6 +3,7 @@ use std::collections::BTreeMap;
|
||||
use itertools::Itertools;
|
||||
|
||||
use super::ProximityEdge;
|
||||
use crate::search::new::interner::Interner;
|
||||
use crate::search::new::query_term::{LocatedQueryTerm, QueryTerm, WordDerivations};
|
||||
use crate::search::new::ranking_rule_graph::proximity::WordPair;
|
||||
use crate::search::new::ranking_rule_graph::EdgeCondition;
|
||||
@ -59,6 +60,7 @@ pub fn visit_from_node(
|
||||
|
||||
pub fn visit_to_node<'search, 'from_data>(
|
||||
ctx: &mut SearchContext<'search>,
|
||||
conditions_interner: &mut Interner<ProximityEdge>,
|
||||
to_node: &QueryNode,
|
||||
from_node_data: &'from_data (WordDerivations, i8),
|
||||
) -> Result<Vec<(u8, EdgeCondition<ProximityEdge>)>> {
|
||||
@ -224,22 +226,23 @@ pub fn visit_to_node<'search, 'from_data>(
|
||||
}
|
||||
}
|
||||
}
|
||||
let mut new_edges = cost_proximity_word_pairs
|
||||
.into_iter()
|
||||
.flat_map(|(cost, proximity_word_pairs)| {
|
||||
let mut edges = vec![];
|
||||
for (proximity, word_pairs) in proximity_word_pairs {
|
||||
edges.push((
|
||||
cost,
|
||||
EdgeCondition::Conditional(ProximityEdge {
|
||||
pairs: word_pairs.into_boxed_slice(),
|
||||
proximity,
|
||||
}),
|
||||
))
|
||||
}
|
||||
edges
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
let mut new_edges =
|
||||
cost_proximity_word_pairs
|
||||
.into_iter()
|
||||
.flat_map(|(cost, proximity_word_pairs)| {
|
||||
let mut edges = vec![];
|
||||
for (proximity, word_pairs) in proximity_word_pairs {
|
||||
edges.push((
|
||||
cost,
|
||||
EdgeCondition::Conditional(conditions_interner.insert(ProximityEdge {
|
||||
pairs: word_pairs.into_boxed_slice(),
|
||||
proximity,
|
||||
})),
|
||||
))
|
||||
}
|
||||
edges
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
new_edges.push((8 + (ngram_len2 - 1) as u8, EdgeCondition::Unconditional));
|
||||
Ok(new_edges)
|
||||
}
|
||||
|
@ -5,23 +5,21 @@ use roaring::RoaringBitmap;
|
||||
|
||||
use super::empty_paths_cache::EmptyPathsCache;
|
||||
use super::{EdgeCondition, RankingRuleGraphTrait};
|
||||
use crate::search::new::interner::Interned;
|
||||
use crate::search::new::interner::{Interned, Interner};
|
||||
use crate::search::new::logger::SearchLogger;
|
||||
use crate::search::new::query_term::WordDerivations;
|
||||
use crate::search::new::small_bitmap::SmallBitmap;
|
||||
use crate::search::new::{QueryGraph, QueryNode, SearchContext};
|
||||
use crate::Result;
|
||||
|
||||
// TODO: intern the proximity edges as well?
|
||||
|
||||
#[derive(Clone)]
|
||||
#[derive(Clone, PartialEq, Eq, Hash)]
|
||||
pub enum WordPair {
|
||||
Words { left: Interned<String>, right: Interned<String> },
|
||||
WordPrefix { left: Interned<String>, right_prefix: Interned<String> },
|
||||
WordPrefixSwapped { left_prefix: Interned<String>, right: Interned<String> },
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
#[derive(Clone, PartialEq, Eq, Hash)]
|
||||
pub struct ProximityEdge {
|
||||
pairs: Box<[WordPair]>,
|
||||
proximity: u8,
|
||||
@ -55,10 +53,11 @@ impl RankingRuleGraphTrait for ProximityGraph {
|
||||
|
||||
fn build_step_visit_destination_node<'from_data, 'search: 'from_data>(
|
||||
ctx: &mut SearchContext<'search>,
|
||||
conditions_interner: &mut Interner<Self::EdgeCondition>,
|
||||
to_node: &QueryNode,
|
||||
from_node_data: &'from_data Self::BuildVisitedFromNode,
|
||||
) -> Result<Vec<(u8, EdgeCondition<Self::EdgeCondition>)>> {
|
||||
build::visit_to_node(ctx, to_node, from_node_data)
|
||||
build::visit_to_node(ctx, conditions_interner, to_node, from_node_data)
|
||||
}
|
||||
|
||||
fn log_state(
|
||||
|
Reference in New Issue
Block a user