Use the MultiOps trait for IN operations

This commit is contained in:
Clément Renault 2024-06-05 17:03:57 -04:00
parent 0a9bd398c7
commit 66470b27e6
No known key found for this signature in database
GPG Key ID: F250A4C4E3AE5F5F

View File

@ -367,17 +367,11 @@ impl<'a> Filter<'a> {
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)?;
if let Some(fid) = field_ids_map.id(fid.value()) { if let Some(fid) = field_ids_map.id(fid.value()) {
let mut bitmap = RoaringBitmap::new(); els.iter()
.map(|el| Condition::Equal(el.clone()))
for el in els { .map(|op| Self::evaluate_operator(rtxn, index, fid, universe, &op))
let op = Condition::Equal(el.clone()); .union()
let el_bitmap =
Self::evaluate_operator(rtxn, index, fid, universe, &op)?;
bitmap |= el_bitmap;
}
Ok(bitmap)
} else { } else {
Ok(RoaringBitmap::new()) Ok(RoaringBitmap::new())
} }