mirror of
https://github.com/meilisearch/MeiliSearch
synced 2025-02-10 20:43:28 +01:00
Some bugfixes for incremental facets
This commit is contained in:
parent
025be5147f
commit
eb5ebdb6d7
@ -147,9 +147,14 @@ impl FacetsUpdateIncrementalInner {
|
||||
.prefix_iter_mut(wtxn, &parent_level_left_bound)?;
|
||||
match it.next() {
|
||||
// 1. left of the current left bound, or
|
||||
Some(Ok((_first_key, _first_value))) => {
|
||||
Some(Ok((first_key, _first_value))) => 'change_left_bound: {
|
||||
// make sure we don't spill on the neighboring fid (level also included defensively)
|
||||
if first_key.field_id != self.field_id || first_key.level != parent_level {
|
||||
break 'change_left_bound;
|
||||
}
|
||||
// remove old left bound
|
||||
unsafe { it.del_current()? };
|
||||
// pop all elements
|
||||
// pop all elements and order to visit the new left bound
|
||||
if let Some(first) = touched_children.last() {
|
||||
touched_parents.push(first);
|
||||
} else {
|
||||
@ -158,7 +163,7 @@ impl FacetsUpdateIncrementalInner {
|
||||
}
|
||||
Some(Err(err)) => return Err(err.into()),
|
||||
// 2. max level reached, exit
|
||||
None => return Ok(()),
|
||||
None => {}
|
||||
}
|
||||
}
|
||||
self.find_touched_parents(
|
||||
@ -225,20 +230,30 @@ impl FacetsUpdateIncrementalInner {
|
||||
|
||||
loop {
|
||||
let mut child_it = self.db.range(wtxn, &(child_left_bound, child_right_bound))?;
|
||||
let res: Result<_> = child_it.by_ref().take(self.max_group_size as usize).try_fold(
|
||||
(None, FacetGroupValue { size: 0, bitmap: Default::default() }),
|
||||
|(bounds, mut group_value), child_res| {
|
||||
let (child_key, child_value) = child_res?;
|
||||
let bounds = match bounds {
|
||||
Some((left_bound, _)) => Some((left_bound, child_key.left_bound)),
|
||||
None => Some((child_key.left_bound, child_key.left_bound)),
|
||||
};
|
||||
// max_group_size <= u8::MAX
|
||||
group_value.size += 1;
|
||||
group_value.bitmap |= &child_value.bitmap;
|
||||
Ok((bounds, group_value))
|
||||
},
|
||||
);
|
||||
let res: Result<_> = child_it
|
||||
.by_ref()
|
||||
.take(self.max_group_size as usize)
|
||||
// stop if we go to the next level or field id
|
||||
.take_while(|res| match res {
|
||||
Ok((child_key, _)) => {
|
||||
child_key.field_id == self.field_id && child_key.level == child_level
|
||||
}
|
||||
Err(_) => true,
|
||||
})
|
||||
.try_fold(
|
||||
(None, FacetGroupValue { size: 0, bitmap: Default::default() }),
|
||||
|(bounds, mut group_value), child_res| {
|
||||
let (child_key, child_value) = child_res?;
|
||||
let bounds = match bounds {
|
||||
Some((left_bound, _)) => Some((left_bound, child_key.left_bound)),
|
||||
None => Some((child_key.left_bound, child_key.left_bound)),
|
||||
};
|
||||
// max_group_size <= u8::MAX
|
||||
group_value.size += 1;
|
||||
group_value.bitmap |= &child_value.bitmap;
|
||||
Ok((bounds, group_value))
|
||||
},
|
||||
);
|
||||
|
||||
let (bounds, group_value) = res?;
|
||||
|
||||
|
@ -745,11 +745,13 @@ fn compute_facet_level_database(
|
||||
let _entered = span.enter();
|
||||
match delta {
|
||||
super::merger::FacetFieldIdDelta::Bulk => {
|
||||
/// TODO: remove info before shipping (or downgrade to debug)
|
||||
tracing::info!(%fid, "bulk string facet processing");
|
||||
FacetsUpdateBulk::new_not_updating_level_0(index, vec![fid], FacetType::String)
|
||||
.execute(wtxn)?
|
||||
}
|
||||
super::merger::FacetFieldIdDelta::Incremental(delta_data) => {
|
||||
/// TODO: remove info before shipping (or downgrade to debug)
|
||||
tracing::info!(%fid, len=%delta_data.len(), "incremental string facet processing");
|
||||
FacetsUpdateIncremental::new(
|
||||
index,
|
||||
@ -770,12 +772,15 @@ fn compute_facet_level_database(
|
||||
let _entered = span.enter();
|
||||
match delta {
|
||||
super::merger::FacetFieldIdDelta::Bulk => {
|
||||
/// TODO: remove info before shipping (or downgrade to debug)
|
||||
tracing::info!(%fid, "bulk number facet processing");
|
||||
FacetsUpdateBulk::new_not_updating_level_0(index, vec![fid], FacetType::Number)
|
||||
.execute(wtxn)?
|
||||
}
|
||||
super::merger::FacetFieldIdDelta::Incremental(delta_data) => {
|
||||
/// TODO: remove info before shipping (or downgrade to debug)
|
||||
tracing::info!(%fid, len=%delta_data.len(), "incremental number facet processing");
|
||||
/// TODO: check is_valid lmdb key
|
||||
FacetsUpdateIncremental::new(
|
||||
index,
|
||||
FacetType::Number,
|
||||
|
Loading…
x
Reference in New Issue
Block a user