Skip to content

Commit 83b374a

Browse files
committed
segmentwriter can ignore store
1 parent b6a57fb commit 83b374a

4 files changed

Lines changed: 13 additions & 6 deletions

File tree

src/indexer/index_writer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ fn index_documents<D: Document>(
203203
segment_updater: &SegmentUpdater,
204204
mut delete_cursor: DeleteCursor,
205205
) -> crate::Result<()> {
206-
let mut segment_writer = SegmentWriter::for_segment(memory_budget, segment.clone())?;
206+
let mut segment_writer = SegmentWriter::for_segment(memory_budget, segment.clone(), false)?;
207207
for document_group in grouped_document_iterator {
208208
for doc in document_group {
209209
segment_writer.add_document(doc)?;

src/indexer/segment_writer.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ pub struct SegmentWriter {
7373
per_field_text_analyzers: Vec<TextAnalyzer>,
7474
term_buffer: Term,
7575
schema: Schema,
76+
ignore_store: bool,
7677
}
7778

7879
impl SegmentWriter {
@@ -85,7 +86,11 @@ impl SegmentWriter {
8586
/// behavior as a memory limit.
8687
/// - segment: The segment being written
8788
/// - schema
88-
pub fn for_segment(memory_budget_in_bytes: usize, segment: Segment) -> crate::Result<Self> {
89+
pub fn for_segment(
90+
memory_budget_in_bytes: usize,
91+
segment: Segment,
92+
ignore_store: bool,
93+
) -> crate::Result<Self> {
8994
let schema = segment.schema();
9095
let tokenizer_manager = segment.index().tokenizers().clone();
9196
let tokenizer_manager_fast_field = segment.index().fast_field_tokenizer().clone();
@@ -130,6 +135,7 @@ impl SegmentWriter {
130135
per_field_text_analyzers,
131136
term_buffer: Term::with_capacity(16),
132137
schema,
138+
ignore_store,
133139
})
134140
}
135141

@@ -156,6 +162,7 @@ impl SegmentWriter {
156162
&self.fieldnorms_writer,
157163
self.segment_serializer,
158164
mapping.as_ref(),
165+
self.ignore_store,
159166
)?;
160167
let doc_opstamps = remap_doc_opstamps(self.doc_opstamps, mapping.as_ref());
161168
Ok(doc_opstamps)
@@ -420,6 +427,7 @@ fn remap_and_write(
420427
fieldnorms_writer: &FieldNormsWriter,
421428
mut serializer: SegmentSerializer,
422429
doc_id_map: Option<&DocIdMapping>,
430+
ignore_store: bool,
423431
) -> crate::Result<()> {
424432
debug!("remap-and-write");
425433
if let Some(fieldnorms_serializer) = serializer.extract_fieldnorms_serializer() {
@@ -429,7 +437,6 @@ fn remap_and_write(
429437
.segment()
430438
.open_read(SegmentComponent::FieldNorms)?;
431439
let fieldnorm_readers = FieldNormReaders::open(fieldnorm_data)?;
432-
let uses_store = schema.fields().any(|(_, entry)| entry.is_stored());
433440
serialize_postings(
434441
ctx,
435442
schema,
@@ -442,7 +449,7 @@ fn remap_and_write(
442449
fast_field_writers.serialize(serializer.get_fast_field_write(), doc_id_map)?;
443450

444451
// finalize temp docstore and create version, which reflects the doc_id_map
445-
if uses_store {
452+
if !ignore_store {
446453
if let Some(doc_id_map) = doc_id_map {
447454
debug!("resort-docstore");
448455
let store_write = serializer

src/indexer/single_segment_index_writer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ pub struct SingleSegmentIndexWriter<D: Document = TantivyDocument> {
1717
impl<D: Document> SingleSegmentIndexWriter<D> {
1818
pub fn new(index: Index, mem_budget: usize) -> crate::Result<Self> {
1919
let segment = index.new_segment();
20-
let segment_writer = SegmentWriter::for_segment(mem_budget, segment.clone())?;
20+
let segment_writer = SegmentWriter::for_segment(mem_budget, segment.clone(), false)?;
2121
Ok(Self {
2222
segment_writer,
2323
segment,

src/postings/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ pub(crate) mod tests {
230230

231231
{
232232
let mut segment_writer =
233-
SegmentWriter::for_segment(15_000_000, segment.clone()).unwrap();
233+
SegmentWriter::for_segment(15_000_000, segment.clone(), false).unwrap();
234234
{
235235
// checking that position works if the field has two values
236236
let op = AddOperation {

0 commit comments

Comments
 (0)