From eb39db44fcf4dfcd0ffda5961a5267386d4a813a Mon Sep 17 00:00:00 2001 From: Paul Masurel Date: Thu, 23 Feb 2017 09:20:30 +0900 Subject: [PATCH] issue/43 Avoid keeping segments with 0 documents. --- src/core/index.rs | 3 ++- src/indexer/index_writer.rs | 10 ++++------ src/indexer/merger.rs | 8 +++++--- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/core/index.rs b/src/core/index.rs index 06a6bc744..c3753514d 100644 --- a/src/core/index.rs +++ b/src/core/index.rs @@ -243,7 +243,8 @@ impl Index { let mut searchers = Vec::new(); for _ in 0..NUM_SEARCHERS { let searchable_segments_clone = searchable_segments.clone(); - let segment_readers: Vec = try!(searchable_segments_clone.into_iter() + let segment_readers: Vec = try!(searchable_segments_clone + .into_iter() .map(SegmentReader::open) .collect()); let searcher = Searcher::from(segment_readers); diff --git a/src/indexer/index_writer.rs b/src/indexer/index_writer.rs index e2a569552..78fe1e811 100644 --- a/src/indexer/index_writer.rs +++ b/src/indexer/index_writer.rs @@ -155,16 +155,14 @@ fn index_documents(heap: &mut Heap, // this is ensured by the call to peek before starting // the worker thread. assert!(num_docs > 0); - - segment - .meta_mut() - .set_num_docs(num_docs); - + let doc_opstamps: Vec = segment_writer.finalize()?; // let segment_entry = advance_deletes(&mut segment, delete_queue, delete_position, )?; + let mut segment_meta = SegmentMeta::new(segment.id()); + segment_meta.set_num_docs(num_docs); - let mut segment_entry = SegmentEntry::new(SegmentMeta::new(segment.id())); + let mut segment_entry = SegmentEntry::new(segment_meta); segment_entry.set_doc_to_opstamp(DocToOpstampMapping::from(doc_opstamps)); segment_updater diff --git a/src/indexer/merger.rs b/src/indexer/merger.rs index 879b278e0..0c28a4d79 100644 --- a/src/indexer/merger.rs +++ b/src/indexer/merger.rs @@ -83,9 +83,11 @@ impl IndexMerger { let mut readers = vec!(); let mut max_doc = 0; for segment in segments { - let reader = SegmentReader::open(segment.clone())?; - max_doc += reader.num_docs(); - readers.push(reader); + if segment.meta().num_docs() > 0 { + let reader = SegmentReader::open(segment.clone())?; + max_doc += reader.num_docs(); + readers.push(reader); + } } Ok(IndexMerger { schema: schema,