Improve the NOT operator to use the universe when possible

This commit is contained in:
Clément Renault 2024-06-05 16:59:00 -04:00
parent 7967e93c16
commit 0a9bd398c7
No known key found for this signature in database
GPG Key ID: F250A4C4E3AE5F5F

View File

@ -349,8 +349,6 @@ impl<'a> Filter<'a> {
match &self.condition { match &self.condition {
FilterCondition::Not(f) => { FilterCondition::Not(f) => {
// TODO improve the documents_ids to also support intersections at deserialize time.
let all_ids = index.documents_ids(rtxn)?;
let selected = Self::inner_evaluate( let selected = Self::inner_evaluate(
&(f.as_ref().clone()).into(), &(f.as_ref().clone()).into(),
rtxn, rtxn,
@ -358,8 +356,14 @@ impl<'a> Filter<'a> {
filterable_fields, filterable_fields,
universe, universe,
)?; )?;
match universe {
Some(universe) => Ok(universe - selected),
None => {
let all_ids = index.documents_ids(rtxn)?;
Ok(all_ids - selected) Ok(all_ids - selected)
} }
}
}
FilterCondition::In { fid, els } => { FilterCondition::In { fid, els } => {
if crate::is_faceted(fid.value(), filterable_fields) { if crate::is_faceted(fid.value(), filterable_fields) {
let field_ids_map = index.fields_ids_map(rtxn)?; let field_ids_map = index.fields_ids_map(rtxn)?;