mirror of
https://github.com/meilisearch/MeiliSearch
synced 2024-11-23 05:14:27 +01:00
feat: Introduce documents deletion using the update system
This commit is contained in:
parent
f83d6df4ef
commit
0db3e6c58c
@ -9,7 +9,7 @@ use crate::indexer::Indexer;
|
||||
use crate::serde::{extract_document_id, Serializer, RamDocumentStore};
|
||||
use crate::RankedMap;
|
||||
|
||||
use super::{Error, Index, DocumentsDeletion};
|
||||
use super::{Error, Index, FinalDocumentsDeletion};
|
||||
use super::index::Cache;
|
||||
|
||||
pub struct DocumentsAddition<'a, D> {
|
||||
@ -88,7 +88,7 @@ impl<'a> FinalDocumentsAddition<'a> {
|
||||
let words = ref_index.words_index;
|
||||
|
||||
// 1. remove the previous documents match indexes
|
||||
let mut documents_deletion = DocumentsDeletion::new(self.inner, self.ranked_map.clone());
|
||||
let mut documents_deletion = FinalDocumentsDeletion::new(self.inner, self.ranked_map.clone());
|
||||
documents_deletion.extend(self.document_ids);
|
||||
documents_deletion.finalize()?;
|
||||
|
||||
|
@ -12,14 +12,39 @@ use super::{Index, Error};
|
||||
use super::index::Cache;
|
||||
|
||||
pub struct DocumentsDeletion<'a> {
|
||||
index: &'a Index,
|
||||
documents: Vec<DocumentId>,
|
||||
}
|
||||
|
||||
impl<'a> DocumentsDeletion<'a> {
|
||||
pub fn new(index: &'a Index) -> DocumentsDeletion<'a> {
|
||||
DocumentsDeletion { index, documents: Vec::new() }
|
||||
}
|
||||
|
||||
pub fn delete_document(&mut self, document_id: DocumentId) {
|
||||
self.documents.push(document_id);
|
||||
}
|
||||
|
||||
pub fn finalize(self) -> Result<u64, Error> {
|
||||
self.index.push_documents_deletion(self.documents)
|
||||
}
|
||||
}
|
||||
|
||||
impl Extend<DocumentId> for DocumentsDeletion<'_> {
|
||||
fn extend<T: IntoIterator<Item=DocumentId>>(&mut self, iter: T) {
|
||||
self.documents.extend(iter)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct FinalDocumentsDeletion<'a> {
|
||||
inner: &'a Index,
|
||||
documents: Vec<DocumentId>,
|
||||
ranked_map: RankedMap,
|
||||
}
|
||||
|
||||
impl<'a> DocumentsDeletion<'a> {
|
||||
pub fn new(inner: &'a Index, ranked_map: RankedMap) -> DocumentsDeletion {
|
||||
DocumentsDeletion { inner, documents: Vec::new(), ranked_map }
|
||||
impl<'a> FinalDocumentsDeletion<'a> {
|
||||
pub fn new(inner: &'a Index, ranked_map: RankedMap) -> FinalDocumentsDeletion {
|
||||
FinalDocumentsDeletion { inner, documents: Vec::new(), ranked_map }
|
||||
}
|
||||
|
||||
fn delete_document_by_id(&mut self, id: DocumentId) {
|
||||
@ -132,7 +157,7 @@ impl<'a> DocumentsDeletion<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> Extend<DocumentId> for DocumentsDeletion<'a> {
|
||||
impl Extend<DocumentId> for FinalDocumentsDeletion<'_> {
|
||||
fn extend<T: IntoIterator<Item=DocumentId>>(&mut self, iter: T) {
|
||||
self.documents.extend(iter)
|
||||
}
|
||||
|
@ -25,8 +25,9 @@ use self::words_index::WordsIndex;
|
||||
|
||||
use super::{
|
||||
DocumentsAddition, FinalDocumentsAddition,
|
||||
DocumentsDeletion,
|
||||
SynonymsAddition, SynonymsDeletion,
|
||||
DocumentsDeletion, FinalDocumentsDeletion,
|
||||
SynonymsAddition,
|
||||
SynonymsDeletion,
|
||||
};
|
||||
|
||||
mod custom_settings_index;
|
||||
@ -46,7 +47,7 @@ fn event_is_set(event: &sled::Event) -> bool {
|
||||
#[derive(Deserialize)]
|
||||
enum UpdateOwned {
|
||||
DocumentsAddition(Vec<serde_json::Value>),
|
||||
DocumentsDeletion( () /*DocumentsDeletion*/),
|
||||
DocumentsDeletion(Vec<DocumentId>),
|
||||
SynonymsAddition( () /*SynonymsAddition*/),
|
||||
SynonymsDeletion( () /*SynonymsDeletion*/),
|
||||
}
|
||||
@ -54,7 +55,7 @@ enum UpdateOwned {
|
||||
#[derive(Serialize)]
|
||||
enum Update<D: serde::Serialize> {
|
||||
DocumentsAddition(Vec<D>),
|
||||
DocumentsDeletion( () /*DocumentsDeletion*/),
|
||||
DocumentsDeletion(Vec<DocumentId>),
|
||||
SynonymsAddition( () /*SynonymsAddition*/),
|
||||
SynonymsDeletion( () /*SynonymsDeletion*/),
|
||||
}
|
||||
@ -84,8 +85,11 @@ fn spawn_update_system(index: Index) -> thread::JoinHandle<()> {
|
||||
}
|
||||
addition.finalize()?;
|
||||
},
|
||||
UpdateOwned::DocumentsDeletion(_) => {
|
||||
// ...
|
||||
UpdateOwned::DocumentsDeletion(documents) => {
|
||||
let ranked_map = index.cache.load().ranked_map.clone();
|
||||
let mut deletion = FinalDocumentsDeletion::new(&index, ranked_map);
|
||||
deletion.extend(documents);
|
||||
deletion.finalize()?;
|
||||
},
|
||||
UpdateOwned::SynonymsAddition(_) => {
|
||||
// ...
|
||||
@ -259,8 +263,7 @@ impl Index {
|
||||
}
|
||||
|
||||
pub fn documents_deletion(&self) -> DocumentsDeletion {
|
||||
let ranked_map = self.cache.load().ranked_map.clone();
|
||||
DocumentsDeletion::new(self, ranked_map)
|
||||
DocumentsDeletion::new(self)
|
||||
}
|
||||
|
||||
pub fn synonyms_addition(&self) -> SynonymsAddition {
|
||||
@ -305,8 +308,8 @@ impl Index {
|
||||
self.raw_push_update(update)
|
||||
}
|
||||
|
||||
pub(crate) fn push_documents_deletion(&self, deletion: DocumentsDeletion) -> Result<u64, Error> {
|
||||
let update = bincode::serialize(&())?;
|
||||
pub(crate) fn push_documents_deletion(&self, deletion: Vec<DocumentId>) -> Result<u64, Error> {
|
||||
let update = bincode::serialize(&deletion)?;
|
||||
self.raw_push_update(update)
|
||||
}
|
||||
|
||||
|
@ -16,7 +16,7 @@ pub use self::error::Error;
|
||||
pub use self::index::{Index, CustomSettingsIndex};
|
||||
|
||||
use self::documents_addition::{DocumentsAddition, FinalDocumentsAddition};
|
||||
use self::documents_deletion::DocumentsDeletion;
|
||||
use self::documents_deletion::{DocumentsDeletion, FinalDocumentsDeletion};
|
||||
use self::synonyms_addition::SynonymsAddition;
|
||||
use self::synonyms_deletion::SynonymsDeletion;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user