diff --git a/src/indexer/merger.rs b/src/indexer/merger.rs index 7fd74c383..9433170fb 100644 --- a/src/indexer/merger.rs +++ b/src/indexer/merger.rs @@ -70,7 +70,7 @@ fn compute_total_num_tokens(readers: &[SegmentReader], field: Field) -> crate::R pub struct IndexMerger { index_settings: IndexSettings, schema: Schema, - readers: Vec, + pub(crate) readers: Vec, max_doc: u32, } diff --git a/src/indexer/merger_sorted_index_test.rs b/src/indexer/merger_sorted_index_test.rs index fd9b4883b..f7af1c697 100644 --- a/src/indexer/merger_sorted_index_test.rs +++ b/src/indexer/merger_sorted_index_test.rs @@ -546,8 +546,9 @@ mod bench_sorted_index_merge { let doc_id_mapping = merger.generate_doc_id_mapping(&sort_by_field).unwrap(); b.iter(|| { - let sorted_doc_ids = doc_id_mapping.iter().map(|(doc_id, reader)|{ - let u64_reader: DynamicFastFieldReader = reader.reader + let sorted_doc_ids = doc_id_mapping.iter().map(|(doc_id, ordinal)|{ + let reader = &merger.readers[*ordinal as usize]; + let u64_reader: DynamicFastFieldReader = reader .fast_fields() .typed_fast_field_reader(field) .expect("Failed to find a reader for single fast field. This is a tantivy bug and it should never happen."); diff --git a/src/postings/postings_writer.rs b/src/postings/postings_writer.rs index f4d61f807..2f5fb55e3 100644 --- a/src/postings/postings_writer.rs +++ b/src/postings/postings_writer.rs @@ -133,7 +133,8 @@ impl MultiFieldPostingsWriter { doc_id_map: Option<&DocIdMapping>, ) -> crate::Result>> { let mut term_offsets: Vec<(&[u8], Addr, UnorderedTermId)> = - self.term_index.iter().collect(); + Vec::with_capacity(self.term_index.len()); + term_offsets.extend(self.term_index.iter()); term_offsets.sort_unstable_by_key(|&(k, _, _)| k); let mut unordered_term_mappings: HashMap> = diff --git a/src/postings/stacker/term_hashmap.rs b/src/postings/stacker/term_hashmap.rs index 752ed760d..5676df00c 100644 --- a/src/postings/stacker/term_hashmap.rs +++ b/src/postings/stacker/term_hashmap.rs @@ -148,6 +148,10 @@ impl TermHashMap { unordered_term_id } + pub fn len(&self) -> usize { + self.len + } + pub fn iter(&self) -> Iter<'_> { Iter { inner: self.occupied.iter(),