diff --git a/src/indexer/merger.rs b/src/indexer/merger.rs index 4cc4557136..6f792b9563 100644 --- a/src/indexer/merger.rs +++ b/src/indexer/merger.rs @@ -697,7 +697,7 @@ impl IndexMerger { for old_doc_addr in doc_id_mapping.iter_old_doc_addrs() { let doc_bytes_it = &mut document_iterators[old_doc_addr.segment_ord as usize]; if let Some(doc_bytes_res) = doc_bytes_it.next() { - let doc_bytes = doc_bytes_res?; + let (_, doc_bytes) = doc_bytes_res?; store_writer.store_bytes(&doc_bytes)?; } else { return Err(DataCorruption::comment_only(format!( @@ -729,7 +729,7 @@ impl IndexMerger { || store_reader.decompressor() != store_writer.compressor().into() { for doc_bytes_res in store_reader.iter_raw(reader.alive_bitset()) { - let doc_bytes = doc_bytes_res?; + let (_, doc_bytes) = doc_bytes_res?; store_writer.store_bytes(&doc_bytes)?; } } else { diff --git a/src/store/reader.rs b/src/store/reader.rs index b7f2430038..afe7e8d729 100644 --- a/src/store/reader.rs +++ b/src/store/reader.rs @@ -239,12 +239,23 @@ impl StoreReader { &'b self, alive_bitset: Option<&'a AliveBitSet>, ) -> impl Iterator> + 'b { + self.enumerate(alive_bitset) + .map(|res| res.map(|(_, doc)| doc)) + } + + /// A variant of [`iter`][Self::iter] which also yields document ID. + pub fn enumerate<'a: 'b, 'b, D: DocumentDeserialize>( + &'b self, + alive_bitset: Option<&'a AliveBitSet>, + ) -> impl Iterator> + 'b { self.iter_raw(alive_bitset).map(|doc_bytes_res| { - let mut doc_bytes = doc_bytes_res?; + let (doc_id, mut doc_bytes) = doc_bytes_res?; let deserializer = BinaryDocumentDeserializer::from_reader(&mut doc_bytes) .map_err(crate::TantivyError::from)?; - D::deserialize(deserializer).map_err(crate::TantivyError::from) + let doc = D::deserialize(deserializer).map_err(crate::TantivyError::from)?; + + Ok((doc_id, doc)) }) } @@ -254,7 +265,7 @@ impl StoreReader { pub(crate) fn iter_raw<'a: 'b, 'b>( &'b self, alive_bitset: Option<&'a AliveBitSet>, - ) -> impl Iterator> + 'b { + ) -> impl Iterator> + 'b { let last_doc_id = self .block_checkpoints() .last() @@ -282,14 +293,14 @@ impl StoreReader { let alive = alive_bitset.map_or(true, |bitset| bitset.is_alive(doc_id)); let res = if alive { - Some((curr_block.clone(), doc_pos)) + Some((doc_id, curr_block.clone(), doc_pos)) } else { None }; doc_pos += 1; res }) - .map(move |(block, doc_pos)| { + .map(move |(doc_id, block, doc_pos)| { let block = block .ok_or_else(|| { DataCorruption::comment_only( @@ -302,7 +313,7 @@ impl StoreReader { })?; let range = block_read_index(&block, doc_pos)?; - Ok(block.slice(range)) + Ok((doc_id, block.slice(range))) }) }