Change how the cost of removing words is computed

This commit is contained in:
Louis Dureuil 2023-06-06 18:10:59 +02:00
parent 701d299369
commit becf1f066a
No known key found for this signature in database
3 changed files with 9 additions and 8 deletions

View File

@ -139,13 +139,12 @@ impl<'ctx, G: RankingRuleGraphTrait> RankingRule<'ctx, QueryGraph> for GraphBase
let mut forbidden_nodes = let mut forbidden_nodes =
SmallBitmap::for_interned_values_in(&query_graph.nodes); SmallBitmap::for_interned_values_in(&query_graph.nodes);
let mut costs = query_graph.nodes.map(|_| None); let mut costs = query_graph.nodes.map(|_| None);
let mut cost = 100; // FIXME: this works because only words uses termsmatchingstrategy at the moment.
for ns in removal_order { for ns in removal_order {
for n in ns.iter() { for n in ns.iter() {
*costs.get_mut(n) = Some((cost, forbidden_nodes.clone())); *costs.get_mut(n) = Some((1, forbidden_nodes.clone()));
} }
forbidden_nodes.union(&ns); forbidden_nodes.union(&ns);
cost += 100;
} }
costs costs
} }

View File

@ -49,10 +49,15 @@ impl<G: RankingRuleGraphTrait> RankingRuleGraph<G> {
if let Some((cost_of_ignoring, forbidden_nodes)) = if let Some((cost_of_ignoring, forbidden_nodes)) =
cost_of_ignoring_node.get(dest_idx) cost_of_ignoring_node.get(dest_idx)
{ {
let dest = graph_nodes.get(dest_idx);
let dest_size = match &dest.data {
QueryNodeData::Term(term) => term.term_ids.len(),
_ => panic!(),
};
let new_edge_id = edges_store.insert(Some(Edge { let new_edge_id = edges_store.insert(Some(Edge {
source_node: source_id, source_node: source_id,
dest_node: dest_idx, dest_node: dest_idx,
cost: *cost_of_ignoring, cost: *cost_of_ignoring * dest_size as u32,
condition: None, condition: None,
nodes_to_skip: forbidden_nodes.clone(), nodes_to_skip: forbidden_nodes.clone(),
})); }));

View File

@ -41,9 +41,6 @@ impl RankingRuleGraphTrait for WordsGraph {
_from: Option<&LocatedQueryTermSubset>, _from: Option<&LocatedQueryTermSubset>,
to_term: &LocatedQueryTermSubset, to_term: &LocatedQueryTermSubset,
) -> Result<Vec<(u32, Interned<Self::Condition>)>> { ) -> Result<Vec<(u32, Interned<Self::Condition>)>> {
Ok(vec![( Ok(vec![(0, conditions_interner.insert(WordsCondition { term: to_term.clone() }))])
to_term.term_ids.len() as u32,
conditions_interner.insert(WordsCondition { term: to_term.clone() }),
)])
} }
} }