From c69a873dd36863afca40daca458d962b7f3ab3eb Mon Sep 17 00:00:00 2001 From: Pascal Seitz Date: Mon, 7 Nov 2022 21:05:08 +0800 Subject: [PATCH] fix num_vals on value index after merge --- src/fastfield/multivalued/reader.rs | 4 ++++ src/indexer/merger.rs | 22 ++++++++++++++++------ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/fastfield/multivalued/reader.rs b/src/fastfield/multivalued/reader.rs index 7d2eb1cf5..059b42323 100644 --- a/src/fastfield/multivalued/reader.rs +++ b/src/fastfield/multivalued/reader.rs @@ -183,6 +183,10 @@ impl MultiValuedU128FastFieldReader { /// Returns the overall number of values in this field. #[inline] pub fn total_num_vals(&self) -> u64 { + assert_eq!( + self.vals_reader.num_vals() as u64, + self.get_index_reader().total_num_vals() + ); self.idx_reader.total_num_vals() } } diff --git a/src/indexer/merger.rs b/src/indexer/merger.rs index d47a00b5e..0ddc26dc7 100644 --- a/src/indexer/merger.rs +++ b/src/indexer/merger.rs @@ -356,6 +356,21 @@ impl IndexMerger { .collect::>(), )?; + let num_vals = segment_and_ff_readers + .iter() + .map(|(segment_reader, reader)| { + // TODO implement generic version, implement reverse scan, all - deletes + if let Some(alive_bitset) = segment_reader.alive_bitset() { + alive_bitset + .iter_alive() + .map(|doc| reader.num_vals(doc)) + .sum() + } else { + reader.total_num_vals() as u32 + } + }) + .sum(); + let fast_field_readers = segment_and_ff_readers .into_iter() .map(|(_, ff_reader)| ff_reader) @@ -370,12 +385,7 @@ impl IndexMerger { }) }; - fast_field_serializer.create_u128_fast_field_with_idx( - field, - iter_gen, - doc_id_mapping.len() as u32, - 1, - )?; + fast_field_serializer.create_u128_fast_field_with_idx(field, iter_gen, num_vals, 1)?; Ok(()) }