mirror of
https://github.com/meilisearch/meilisearch.git
synced 2025-06-06 12:15:45 +00:00
Change implementation of MergedDocuments::iter_top_level_fields
This commit is contained in:
parent
4a082683df
commit
1cf14e765f
@ -1,5 +1,6 @@
|
|||||||
use std::collections::{BTreeMap, BTreeSet};
|
use std::collections::{BTreeMap, BTreeSet};
|
||||||
|
|
||||||
|
use either::Either;
|
||||||
use heed::RoTxn;
|
use heed::RoTxn;
|
||||||
use raw_collections::RawMap;
|
use raw_collections::RawMap;
|
||||||
use serde_json::value::RawValue;
|
use serde_json::value::RawValue;
|
||||||
@ -209,29 +210,34 @@ impl<'d, 'doc: 'd, 't: 'd, Mapper: FieldIdMapper> Document<'d>
|
|||||||
for MergedDocument<'d, 'doc, 't, Mapper>
|
for MergedDocument<'d, 'doc, 't, Mapper>
|
||||||
{
|
{
|
||||||
fn iter_top_level_fields(&self) -> impl Iterator<Item = Result<(&'d str, &'d RawValue)>> {
|
fn iter_top_level_fields(&self) -> impl Iterator<Item = Result<(&'d str, &'d RawValue)>> {
|
||||||
let mut new_doc_it = self.new_doc.iter_top_level_fields();
|
match &self.db {
|
||||||
let mut db_it = self.db.iter().flat_map(|db| db.iter_top_level_fields());
|
Some(db) => {
|
||||||
let mut seen_fields = BTreeSet::new();
|
let mut new_doc_it = self.new_doc.iter_top_level_fields();
|
||||||
|
let mut db_it = db.iter_top_level_fields();
|
||||||
|
let mut seen_fields = BTreeSet::new();
|
||||||
|
|
||||||
std::iter::from_fn(move || {
|
Either::Left(std::iter::from_fn(move || {
|
||||||
if let Some(next) = new_doc_it.next() {
|
if let Some(next) = new_doc_it.next() {
|
||||||
if let Ok((name, _)) = next {
|
if let Ok((name, _)) = next {
|
||||||
seen_fields.insert(name);
|
seen_fields.insert(name);
|
||||||
}
|
|
||||||
return Some(next);
|
|
||||||
}
|
|
||||||
loop {
|
|
||||||
match db_it.next()? {
|
|
||||||
Ok((name, value)) => {
|
|
||||||
if seen_fields.contains(name) {
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
return Some(Ok((name, value)));
|
return Some(next);
|
||||||
}
|
}
|
||||||
Err(err) => return Some(Err(err)),
|
loop {
|
||||||
}
|
match db_it.next()? {
|
||||||
|
Ok((name, value)) => {
|
||||||
|
if seen_fields.contains(name) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
return Some(Ok((name, value)));
|
||||||
|
}
|
||||||
|
Err(err) => return Some(Err(err)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}))
|
||||||
}
|
}
|
||||||
})
|
None => Either::Right(self.new_doc.iter_top_level_fields()),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn vectors_field(&self) -> Result<Option<&'d RawValue>> {
|
fn vectors_field(&self) -> Result<Option<&'d RawValue>> {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user