Fix the merging of documents

This commit is contained in:
Clément Renault 2024-09-02 14:41:20 +02:00
parent e639ec79d1
commit 6526ce1208
No known key found for this signature in database
GPG Key ID: F250A4C4E3AE5F5F

View File

@ -210,17 +210,22 @@ fn merge_document_for_updates(
let current = index.documents.remap_data_type::<Bytes>().get(rtxn, &docid)?; let current = index.documents.remap_data_type::<Bytes>().get(rtxn, &docid)?;
let current: Option<&KvReaderFieldId> = current.map(Into::into); let current: Option<&KvReaderFieldId> = current.map(Into::into);
if let Some(current) = current { if operations.is_empty() {
current.into_iter().for_each(|(k, v)| { return Ok(None); // but it's strange
document.insert(k, v.into());
});
} }
let last_deletion = let last_deletion = operations.iter().rposition(|op| matches!(op, InnerDocOp::Deletion));
operations.iter().rposition(|operation| matches!(operation, DocumentOperation::Deletion));
let operations = &operations[last_deletion.map_or(0, |i| i + 1)..]; let operations = &operations[last_deletion.map_or(0, |i| i + 1)..];
// If there was a deletion we must not start
// from the original document but from scratch.
if last_deletion.is_none() {
if let Some(current) = current {
current.into_iter().for_each(|(k, v)| {
document.insert(k, v.into());
});
}
}
if operations.is_empty() { if operations.is_empty() {
match current { match current {
Some(current) => { Some(current) => {