mirror of
https://github.com/meilisearch/MeiliSearch
synced 2024-11-26 14:54:27 +01:00
Position now takes into account the distance to the position of the word in the query
it used to be based on the distance to the position 0
This commit is contained in:
parent
af57c3c577
commit
a20e4d447c
@ -77,6 +77,8 @@ impl RankingRuleGraphTrait for PositionGraph {
|
|||||||
let mut positions_for_costs = FxHashMap::<u32, Vec<u16>>::default();
|
let mut positions_for_costs = FxHashMap::<u32, Vec<u16>>::default();
|
||||||
|
|
||||||
for position in all_positions {
|
for position in all_positions {
|
||||||
|
// FIXME: bucketed position???
|
||||||
|
let distance = position.abs_diff(*term.positions.start());
|
||||||
let cost = {
|
let cost = {
|
||||||
let mut cost = 0;
|
let mut cost = 0;
|
||||||
for i in 0..term.term_ids.len() {
|
for i in 0..term.term_ids.len() {
|
||||||
@ -84,7 +86,7 @@ impl RankingRuleGraphTrait for PositionGraph {
|
|||||||
// Because if two words are in the same bucketed position (e.g. 32) and consecutive,
|
// Because if two words are in the same bucketed position (e.g. 32) and consecutive,
|
||||||
// then their position cost will be 32+32=64, but an ngram of these two words at the
|
// then their position cost will be 32+32=64, but an ngram of these two words at the
|
||||||
// same position will have a cost of 32+32+1=65
|
// same position will have a cost of 32+32+1=65
|
||||||
cost += cost_from_position(position as u32 + i as u32);
|
cost += cost_from_distance(distance as u32 + i as u32);
|
||||||
}
|
}
|
||||||
cost
|
cost
|
||||||
};
|
};
|
||||||
@ -104,8 +106,8 @@ impl RankingRuleGraphTrait for PositionGraph {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn cost_from_position(sum_positions: u32) -> u32 {
|
fn cost_from_distance(distance: u32) -> u32 {
|
||||||
match sum_positions {
|
match distance {
|
||||||
0 => 0,
|
0 => 0,
|
||||||
1 => 1,
|
1 => 1,
|
||||||
2..=4 => 2,
|
2..=4 => 2,
|
||||||
|
Loading…
Reference in New Issue
Block a user