issue/43 Avoid keeping segments with 0 documents.

This commit is contained in:
Paul Masurel
2017-02-23 09:20:30 +09:00
parent df9090cb0b
commit eb39db44fc
3 changed files with 11 additions and 10 deletions

View File

@@ -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<SegmentReader> = try!(searchable_segments_clone.into_iter()
let segment_readers: Vec<SegmentReader> = try!(searchable_segments_clone
.into_iter()
.map(SegmentReader::open)
.collect());
let searcher = Searcher::from(segment_readers);

View File

@@ -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<u64> = 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

View File

@@ -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,