mirror of
https://github.com/meilisearch/meilisearch.git
synced 2025-01-18 08:48:32 +08:00
Simplify the document fields counts deletion
This commit is contained in:
parent
9ff92c5d15
commit
0de37819b4
@ -702,7 +702,7 @@ mod tests {
|
|||||||
|
|
||||||
for ((docid, attr, _), count) in fields_counts {
|
for ((docid, attr, _), count) in fields_counts {
|
||||||
let prev = index.documents_fields_counts
|
let prev = index.documents_fields_counts
|
||||||
.document_attribute_count(
|
.document_field_count(
|
||||||
&mut writer,
|
&mut writer,
|
||||||
docid,
|
docid,
|
||||||
SchemaAttr(attr),
|
SchemaAttr(attr),
|
||||||
|
@ -27,19 +27,14 @@ impl DocumentsFieldsCounts {
|
|||||||
document_id: DocumentId,
|
document_id: DocumentId,
|
||||||
) -> Result<usize, rkv::StoreError>
|
) -> Result<usize, rkv::StoreError>
|
||||||
{
|
{
|
||||||
let document_id_bytes = document_id.0.to_be_bytes();
|
|
||||||
let mut keys_to_delete = Vec::new();
|
let mut keys_to_delete = Vec::new();
|
||||||
|
|
||||||
// WARN we can not delete the keys using the iterator
|
// WARN we can not delete the keys using the iterator
|
||||||
// so we store them and delete them just after
|
// so we store them and delete them just after
|
||||||
let iter = self.documents_fields_counts.iter_from(writer, document_id_bytes)?;
|
for result in self.document_fields_counts(writer, document_id)? {
|
||||||
for result in iter {
|
let (attribute, _) = result?;
|
||||||
let (key, _) = result?;
|
let key = document_attribute_into_key(document_id, attribute);
|
||||||
let array = TryFrom::try_from(key).unwrap();
|
keys_to_delete.push(key);
|
||||||
let (current_document_id, _) = document_attribute_from_key(array);
|
|
||||||
if current_document_id != document_id { break }
|
|
||||||
|
|
||||||
keys_to_delete.push(key.to_owned());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let count = keys_to_delete.len();
|
let count = keys_to_delete.len();
|
||||||
@ -50,9 +45,9 @@ impl DocumentsFieldsCounts {
|
|||||||
Ok(count)
|
Ok(count)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn document_attribute_count<'a>(
|
pub fn document_field_count(
|
||||||
&self,
|
&self,
|
||||||
reader: &'a impl rkv::Readable,
|
reader: &impl rkv::Readable,
|
||||||
document_id: DocumentId,
|
document_id: DocumentId,
|
||||||
attribute: SchemaAttr,
|
attribute: SchemaAttr,
|
||||||
) -> Result<Option<u64>, rkv::StoreError>
|
) -> Result<Option<u64>, rkv::StoreError>
|
||||||
@ -92,7 +87,7 @@ pub struct DocumentFieldsCountsIter<'r> {
|
|||||||
iter: rkv::store::single::Iter<'r>,
|
iter: rkv::store::single::Iter<'r>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'r> Iterator for DocumentFieldsCountsIter<'r> {
|
impl Iterator for DocumentFieldsCountsIter<'_> {
|
||||||
type Item = Result<(SchemaAttr, u64), rkv::StoreError>;
|
type Item = Result<(SchemaAttr, u64), rkv::StoreError>;
|
||||||
|
|
||||||
fn next(&mut self) -> Option<Self::Item> {
|
fn next(&mut self) -> Option<Self::Item> {
|
||||||
@ -116,7 +111,7 @@ pub struct DocumentsIdsIter<'r> {
|
|||||||
iter: rkv::store::single::Iter<'r>,
|
iter: rkv::store::single::Iter<'r>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'r> Iterator for DocumentsIdsIter<'r> {
|
impl Iterator for DocumentsIdsIter<'_> {
|
||||||
type Item = Result<DocumentId, rkv::StoreError>;
|
type Item = Result<DocumentId, rkv::StoreError>;
|
||||||
|
|
||||||
fn next(&mut self) -> Option<Self::Item> {
|
fn next(&mut self) -> Option<Self::Item> {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
use crate::{store, error::UnsupportedOperation, MResult};
|
|
||||||
use crate::update::{Update, next_update_id};
|
use crate::update::{Update, next_update_id};
|
||||||
|
use crate::{store, MResult};
|
||||||
|
|
||||||
pub fn apply_customs_update(
|
pub fn apply_customs_update(
|
||||||
writer: &mut rkv::Writer,
|
writer: &mut rkv::Writer,
|
||||||
|
Loading…
Reference in New Issue
Block a user