mirror of
https://github.com/quickwit-oss/tantivy.git
synced 2026-01-16 22:12:55 +00:00
added fast field writer to segment writer
This commit is contained in:
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user