mirror of
https://github.com/meilisearch/MeiliSearch
synced 2024-11-26 14:54:27 +01:00
Fix the prefix system
This commit is contained in:
parent
d7a7560220
commit
9cc3c56c9c
@ -397,24 +397,22 @@ pub fn traverse_query_tree<'o, 'txn>(
|
|||||||
array
|
array
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut results: Vec<&Set<_>> = Vec::new();
|
|
||||||
|
|
||||||
// We retrieve the cached postings lists for all
|
// We retrieve the cached postings lists for all
|
||||||
// the words that starts with this short prefix.
|
// the words that starts with this short prefix.
|
||||||
let result = ctx.prefix_postings_lists.prefix_postings_list(reader, prefix)?.unwrap_or_default();
|
let result = ctx.prefix_postings_lists.prefix_postings_list(reader, prefix)?.unwrap_or_default();
|
||||||
let key = PostingsKey { query, input: word.clone().into_bytes(), distance: 0, is_exact: false };
|
let key = PostingsKey { query, input: word.clone().into_bytes(), distance: 0, is_exact: false };
|
||||||
postings.insert(key, result.matches);
|
postings.insert(key, result.matches);
|
||||||
results.push(&result.docids);
|
let prefix_docids = &result.docids;
|
||||||
|
|
||||||
// We retrieve the exact postings list for the prefix,
|
// We retrieve the exact postings list for the prefix,
|
||||||
// because we must consider these matches as exact.
|
// because we must consider these matches as exact.
|
||||||
let result = ctx.postings_lists.postings_list(reader, word.as_bytes())?.unwrap_or_default();
|
let result = ctx.postings_lists.postings_list(reader, word.as_bytes())?.unwrap_or_default();
|
||||||
let key = PostingsKey { query, input: word.clone().into_bytes(), distance: 0, is_exact: true };
|
let key = PostingsKey { query, input: word.clone().into_bytes(), distance: 0, is_exact: true };
|
||||||
postings.insert(key, result.matches);
|
postings.insert(key, result.matches);
|
||||||
results.push(&result.docids);
|
let exact_docids = &result.docids;
|
||||||
|
|
||||||
let before = Instant::now();
|
let before = Instant::now();
|
||||||
let docids = sdset::multi::Union::new(results).into_set_buf();
|
let docids = sdset::duo::Union::new(prefix_docids, exact_docids).into_set_buf();
|
||||||
println!("{:2$}prefix docids construction took {:.02?}", "", before.elapsed(), depth * 2);
|
println!("{:2$}prefix docids construction took {:.02?}", "", before.elapsed(), depth * 2);
|
||||||
|
|
||||||
Cow::Owned(docids)
|
Cow::Owned(docids)
|
||||||
@ -434,7 +432,7 @@ pub fn traverse_query_tree<'o, 'txn>(
|
|||||||
while let Some(input) = stream.next() {
|
while let Some(input) = stream.next() {
|
||||||
if let Some(result) = ctx.postings_lists.postings_list(reader, input)? {
|
if let Some(result) = ctx.postings_lists.postings_list(reader, input)? {
|
||||||
let distance = dfa.eval(input).to_u8();
|
let distance = dfa.eval(input).to_u8();
|
||||||
let is_exact = *prefix == false && distance == 0 && input.len() == word.len();
|
let is_exact = distance == 0 && input.len() == word.len();
|
||||||
docids.extend_from_slice(&result.docids);
|
docids.extend_from_slice(&result.docids);
|
||||||
let key = PostingsKey { query, input: input.to_owned(), distance, is_exact };
|
let key = PostingsKey { query, input: input.to_owned(), distance, is_exact };
|
||||||
postings.insert(key, result.matches);
|
postings.insert(key, result.matches);
|
||||||
|
Loading…
Reference in New Issue
Block a user