Fix the processed distance algorithm

This commit is contained in:
Clément Renault
2019-12-07 13:32:43 +01:00
parent 0f698d6bd9
commit 22b19c0d93
2 changed files with 27 additions and 11 deletions

View File

@ -46,14 +46,22 @@ pub trait Criterion {
fn prepare_query_distances(
documents: &mut [RawDocument],
query_enhancer: &QueryEnhancer,
automatons: &[QueryWordAutomaton],
) {
for document in documents {
if !document.processed_distances.is_empty() { continue }
let mut processed = Vec::new();
for m in document.raw_matches.iter() {
// FIXME we really need to take splitted words into account
// those must be seen at the same level as the non-splitteds
// if automatons[m.query_index as usize].phrase_query.is_some() {
// continue
// }
let range = query_enhancer.replacement(m.query_index as u32);
processed.resize(range.end as usize, None);
let new_len = cmp::max(range.end as usize, processed.len());
processed.resize(new_len, None);
for index in range {
let index = index as usize;
@ -81,7 +89,7 @@ impl Criterion for Typo {
query_enhancer: &QueryEnhancer,
automatons: &[QueryWordAutomaton],
) {
prepare_query_distances(documents, query_enhancer);
prepare_query_distances(documents, query_enhancer, automatons);
}
fn evaluate(
@ -139,7 +147,7 @@ impl Criterion for Words {
query_enhancer: &QueryEnhancer,
automatons: &[QueryWordAutomaton],
) {
prepare_query_distances(documents, query_enhancer);
prepare_query_distances(documents, query_enhancer, automatons);
}
fn evaluate(