diff --git a/src/core/codec.rs b/src/core/codec.rs index 3644c5566..cd377f38e 100644 --- a/src/core/codec.rs +++ b/src/core/codec.rs @@ -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, // 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() } diff --git a/src/core/index.rs b/src/core/index.rs index 3d3d101b7..cffad9c61 100644 --- a/src/core/index.rs +++ b/src/core/index.rs @@ -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", } } diff --git a/src/core/writer.rs b/src/core/writer.rs index e054c4e26..6b269c4bc 100644 --- a/src/core/writer.rs +++ b/src/core/writer.rs @@ -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() } }