mirror of
https://github.com/quickwit-oss/tantivy.git
synced 2026-08-18 03:58:21 +00:00
fix: address manual mapping review comments
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -100,7 +100,7 @@ impl DocIdMapping {
|
||||
|
||||
fn from_new_id_to_old_id_inner<E: Error>(
|
||||
new_doc_id_to_old: Vec<DocId>,
|
||||
mut check: impl FnMut(DocId) -> Result<(), E>,
|
||||
mut validate: impl FnMut(DocId) -> Result<(), E>,
|
||||
) -> Result<Self, E> {
|
||||
let max_doc = new_doc_id_to_old.len();
|
||||
let old_max_doc = new_doc_id_to_old
|
||||
@@ -111,7 +111,7 @@ impl DocIdMapping {
|
||||
.unwrap_or(0);
|
||||
let mut old_doc_id_to_new = vec![0; old_max_doc as usize];
|
||||
for i in 0..max_doc {
|
||||
(check)(new_doc_id_to_old[i])?;
|
||||
(validate)(new_doc_id_to_old[i])?;
|
||||
old_doc_id_to_new[new_doc_id_to_old[i] as usize] = i as DocId;
|
||||
}
|
||||
Ok(DocIdMapping {
|
||||
|
||||
@@ -4,7 +4,7 @@ use crate::indexer::operation::AddOperation;
|
||||
use crate::indexer::segment_updater::save_metas;
|
||||
use crate::indexer::{DocIdMapping, SegmentWriter};
|
||||
use crate::schema::document::Document;
|
||||
use crate::{Directory, Index, IndexMeta, IndexSettings, Opstamp, Segment, TantivyDocument};
|
||||
use crate::{Directory, Index, IndexMeta, Opstamp, Segment, TantivyDocument};
|
||||
|
||||
#[doc(hidden)]
|
||||
pub struct SingleSegmentIndexWriter<D: Document = TantivyDocument> {
|
||||
@@ -45,9 +45,8 @@ impl<D: Document> SingleSegmentIndexWriter<D> {
|
||||
} = self;
|
||||
let max_doc = segment_writer.max_doc();
|
||||
segment_writer.finalize()?;
|
||||
let remapping_required = segment.index().settings().sort_by_field.is_some();
|
||||
let index_settings = segment.index().settings().clone();
|
||||
Self::finalize_inner(segment, max_doc, remapping_required, index_settings)
|
||||
let did_remapping = segment.index().settings().sort_by_field.is_some();
|
||||
Self::finalize_inner(segment, max_doc, did_remapping, false)
|
||||
}
|
||||
|
||||
pub fn finalize_with_doc_id_mapping(self, mapping: &DocIdMapping) -> crate::Result<Index> {
|
||||
@@ -58,30 +57,29 @@ impl<D: Document> SingleSegmentIndexWriter<D> {
|
||||
} = self;
|
||||
let max_doc = segment_writer.max_doc();
|
||||
segment_writer.finalize_with_doc_id_mapping(mapping)?;
|
||||
let mut index_settings = segment.index().settings().clone();
|
||||
index_settings.manual_doc_id_mapping = false;
|
||||
let mut index = Self::finalize_inner(segment, max_doc, true, index_settings)?;
|
||||
index.settings_mut().manual_doc_id_mapping = false;
|
||||
Ok(index)
|
||||
Self::finalize_inner(segment, max_doc, true, true)
|
||||
}
|
||||
|
||||
fn finalize_inner(
|
||||
segment: Segment,
|
||||
max_doc: u32,
|
||||
remapping_required: bool,
|
||||
index_settings: IndexSettings,
|
||||
did_remapping: bool,
|
||||
clear_manual_doc_id_mapping: bool,
|
||||
) -> crate::Result<Index> {
|
||||
let segment: Segment = segment.with_max_doc(max_doc);
|
||||
let segment_meta = segment.meta();
|
||||
let mut index = segment.index().clone();
|
||||
if clear_manual_doc_id_mapping {
|
||||
index.settings_mut().manual_doc_id_mapping = false;
|
||||
}
|
||||
|
||||
if remapping_required {
|
||||
if did_remapping {
|
||||
// Untrack the temp docstore file from the segment metadata.
|
||||
segment_meta.untrack_temp_docstore();
|
||||
}
|
||||
|
||||
let index_meta = IndexMeta {
|
||||
index_settings,
|
||||
index_settings: index.settings().clone(),
|
||||
segments: vec![segment_meta.clone()],
|
||||
schema: index.schema(),
|
||||
opstamp: 0,
|
||||
@@ -90,7 +88,7 @@ impl<D: Document> SingleSegmentIndexWriter<D> {
|
||||
save_metas(&index_meta, index.directory())?;
|
||||
index.directory().sync_directory()?;
|
||||
|
||||
if remapping_required {
|
||||
if did_remapping {
|
||||
// Run the garbage collector to remove the temp docstore file from the directory.
|
||||
let mut living_files = segment_meta.list_files();
|
||||
living_files.insert(crate::core::META_FILEPATH.to_path_buf());
|
||||
|
||||
Reference in New Issue
Block a user