added fast field writer to segment writer

This commit is contained in:
Paul Masurel
2016-03-26 21:08:44 +09:00
parent b8097eb630
commit 4e8a8eb503
3 changed files with 13 additions and 1 deletions

View File

@@ -8,6 +8,7 @@ use core::index::SegmentComponent;
use core::schema::Term;
use core::schema::DocId;
use core::fstmap::FstMapBuilder;
use core::fastfield::FastFieldSerializer;
use core::store::StoreWriter;
use core::serialize::BinarySerializable;
use core::simdcompression;
@@ -45,6 +46,7 @@ pub struct SegmentSerializer {
written_bytes_postings: usize,
postings_write: WritePtr,
store_writer: StoreWriter,
fast_field_serializer: FastFieldSerializer,
term_fst_builder: FstMapBuilder<WritePtr, TermInfo>, // TODO find an alternative to work around the "move"
encoder: simdcompression::Encoder,
}
@@ -57,18 +59,25 @@ impl SegmentSerializer {
let term_write = try!(segment.open_write(SegmentComponent::TERMS));
let postings_write = try!(segment.open_write(SegmentComponent::POSTINGS));
let store_write = try!(segment.open_write(SegmentComponent::STORE));
let fast_field_write = try!(segment.open_write(SegmentComponent::FASTFIELDS));
let term_fst_builder_result = FstMapBuilder::new(term_write);
let term_fst_builder = term_fst_builder_result.unwrap();
let fast_field_serializer = try!(FastFieldSerializer::new(fast_field_write));
Ok(SegmentSerializer {
segment: segment.clone(),
written_bytes_postings: 0,
postings_write: postings_write,
store_writer: StoreWriter::new(store_write),
fast_field_serializer: fast_field_serializer,
term_fst_builder: term_fst_builder,
encoder: simdcompression::Encoder::new(),
})
}
pub fn get_fast_field_serializer(&mut self,) -> &mut FastFieldSerializer {
&mut self.fast_field_serializer
}
pub fn segment(&self,) -> Segment {
self.segment.clone()
}

View File

@@ -207,6 +207,7 @@ pub enum SegmentComponent {
INFO,
POSTINGS,
// POSITIONS,
FASTFIELDS,
TERMS,
STORE,
}
@@ -230,6 +231,7 @@ impl Segment {
SegmentComponent::POSTINGS => ".idx",
SegmentComponent::TERMS => ".term",
SegmentComponent::STORE => ".store",
SegmentComponent::FASTFIELDS => ".fast",
}
}

View File

@@ -129,7 +129,7 @@ impl SegmentWriter {
let mut stored_fieldvalues_it = doc.text_fields().filter(|text_field_value| {
schema.text_field_options(&text_field_value.field).is_stored()
});
// try!(self.fastfield_writers.add_doc(&doc));
self.fast_field_writers.add_document(&doc);
try!(self.segment_serializer.store_doc(&mut stored_fieldvalues_it));
self.max_doc += 1;
Ok(())
@@ -140,6 +140,7 @@ impl SegmentWriter {
impl SerializableSegment for SegmentWriter {
fn write(&self, mut serializer: SegmentSerializer) -> io::Result<()> {
try!(self.postings_writer.serialize(&mut serializer));
try!(self.fast_field_writers.serialize(serializer.get_fast_field_serializer()));
serializer.close()
}
}