mirror of
https://github.com/meilisearch/MeiliSearch
synced 2024-11-23 05:14:27 +01:00
Avoid cloning RoraringBitmaps when unecessary
This commit is contained in:
parent
b8a1fc0126
commit
d31da26a51
13
src/lib.rs
13
src/lib.rs
@ -228,15 +228,22 @@ impl Index {
|
|||||||
for positions in positions {
|
for positions in positions {
|
||||||
let before = Instant::now();
|
let before = Instant::now();
|
||||||
|
|
||||||
|
// Precompute the potentially missing unions
|
||||||
|
positions.iter().enumerate().for_each(|(word, pos)| {
|
||||||
|
union_cache.entry((word, *pos)).or_insert_with(|| unions_word_pos(word, *pos));
|
||||||
|
});
|
||||||
|
|
||||||
|
// Retrieve the unions along with the popularity of it.
|
||||||
let mut to_intersect: Vec<_> = positions.iter()
|
let mut to_intersect: Vec<_> = positions.iter()
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.map(|(word, pos)| {
|
.map(|(word, pos)| {
|
||||||
let docids = union_cache.entry((word, *pos)).or_insert_with(|| unions_word_pos(word, *pos));
|
let docids = union_cache.get(&(word, *pos)).unwrap();
|
||||||
// FIXME don't clone here
|
(docids.len(), docids)
|
||||||
(docids.len(), docids.clone())
|
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
|
// Sort the unions by popuarity to help reduce
|
||||||
|
// the number of documents as soon as possible.
|
||||||
to_intersect.sort_unstable_by_key(|(l, _)| *l);
|
to_intersect.sort_unstable_by_key(|(l, _)| *l);
|
||||||
let elapsed_retrieving = before.elapsed();
|
let elapsed_retrieving = before.elapsed();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user