diff --git a/src/update/clear_documents.rs b/src/update/clear_documents.rs new file mode 100644 index 000000000..a19692e19 --- /dev/null +++ b/src/update/clear_documents.rs @@ -0,0 +1,49 @@ +use roaring::RoaringBitmap; +use crate::Index; + +pub struct ClearDocuments<'t, 'u, 'i> { + wtxn: &'t mut heed::RwTxn<'u>, + index: &'i Index, +} + +impl<'t, 'u, 'i> ClearDocuments<'t, 'u, 'i> { + pub fn new(wtxn: &'t mut heed::RwTxn<'u>, index: &'i Index) -> ClearDocuments<'t, 'u, 'i> { + ClearDocuments { wtxn, index } + } + + pub fn execute(self) -> anyhow::Result { + let Index { + main: _main, + word_docids, + docid_word_positions, + word_pair_proximity_docids, + documents, + } = self.index; + + // We clear the word fst. + self.index.put_words_fst(self.wtxn, &fst::Set::default())?; + + // We clear the users ids documents ids. + self.index.put_users_ids_documents_ids(self.wtxn, &fst::Map::default())?; + + // We retrieve the documents ids. + let documents_ids = self.index.documents_ids(self.wtxn)?; + + // We clear the internal documents ids. + self.index.put_documents_ids(self.wtxn, &RoaringBitmap::default())?; + + // We clear the word docids. + word_docids.clear(self.wtxn)?; + + // We clear the docid word positions. + docid_word_positions.clear(self.wtxn)?; + + // We clear the word pair proximity docids. + word_pair_proximity_docids.clear(self.wtxn)?; + + // We clear the documents themselves. + documents.clear(self.wtxn)?; + + Ok(documents_ids.len() as usize) + } +} diff --git a/src/update/mod.rs b/src/update/mod.rs index aa5ad7e26..8476ca7ee 100644 --- a/src/update/mod.rs +++ b/src/update/mod.rs @@ -1,7 +1,9 @@ mod available_documents_ids; +mod clear_documents; mod update_builder; mod update_store; pub use self::available_documents_ids::AvailableDocumentsIds; +pub use self::clear_documents::ClearDocuments; pub use self::update_builder::UpdateBuilder; pub use self::update_store::UpdateStore; diff --git a/src/update/update_builder.rs b/src/update/update_builder.rs index 1910a8909..64602eae1 100644 --- a/src/update/update_builder.rs +++ b/src/update/update_builder.rs @@ -7,6 +7,7 @@ use itertools::Itertools; use roaring::RoaringBitmap; use crate::{Index, BEU32}; +use super::clear_documents::ClearDocuments; pub struct UpdateBuilder { log_every_n: usize, @@ -98,53 +99,6 @@ impl UpdateBuilder { } } -pub struct ClearDocuments<'t, 'u, 'i> { - wtxn: &'t mut heed::RwTxn<'u>, - index: &'i Index, -} - -impl<'t, 'u, 'i> ClearDocuments<'t, 'u, 'i> { - fn new(wtxn: &'t mut heed::RwTxn<'u>, index: &'i Index) -> ClearDocuments<'t, 'u, 'i> { - ClearDocuments { wtxn, index } - } - - pub fn execute(self) -> anyhow::Result { - let Index { - main: _main, - word_docids, - docid_word_positions, - word_pair_proximity_docids, - documents, - } = self.index; - - // We clear the word fst. - self.index.put_words_fst(self.wtxn, &fst::Set::default())?; - - // We clear the users ids documents ids. - self.index.put_users_ids_documents_ids(self.wtxn, &fst::Map::default())?; - - // We retrieve the documents ids. - let documents_ids = self.index.documents_ids(self.wtxn)?; - - // We clear the internal documents ids. - self.index.put_documents_ids(self.wtxn, &RoaringBitmap::default())?; - - // We clear the word docids. - word_docids.clear(self.wtxn)?; - - // We clear the docid word positions. - docid_word_positions.clear(self.wtxn)?; - - // We clear the word pair proximity docids. - word_pair_proximity_docids.clear(self.wtxn)?; - - // We clear the documents themselves. - documents.clear(self.wtxn)?; - - Ok(documents_ids.len() as usize) - } -} - pub struct DeleteDocuments<'t, 'u, 'i> { wtxn: &'t mut heed::RwTxn<'u>, index: &'i Index,