Use more efficient method for deletion in benchmarks

This commit is contained in:
Louis Dureuil 2023-11-09 16:13:15 +01:00
parent f8289cd974
commit 825257da76
No known key found for this signature in database

View File

@ -864,22 +864,12 @@ fn delete_documents_from_ids(index: Index, document_ids_to_delete: Vec<RoaringBi
let indexer_config = IndexerConfig::default(); let indexer_config = IndexerConfig::default();
for ids in document_ids_to_delete { for ids in document_ids_to_delete {
let external_documents_ids = index.external_documents_ids();
// FIXME: for filters matching a lot of documents, this will allocate a huge vec of external docids (strings).
// Since what we have is an iterator, it would be better to delete in chunks
let external_to_internal: std::result::Result<Vec<_>, RoaringBitmap> =
external_documents_ids
.find_external_id_of(&wtxn, ids)
.unwrap()
.only_external_ids()
.collect();
let ids = external_to_internal.unwrap();
let config = IndexDocumentsConfig::default(); let config = IndexDocumentsConfig::default();
let mut builder = let mut builder =
IndexDocuments::new(&mut wtxn, &index, &indexer_config, config, |_| (), || false) IndexDocuments::new(&mut wtxn, &index, &indexer_config, config, |_| (), || false)
.unwrap(); .unwrap();
(builder, _) = builder.remove_documents(ids).unwrap(); (builder, _) = builder.remove_documents_from_db_no_batch(&ids).unwrap();
builder.execute().unwrap(); builder.execute().unwrap();
} }