This commit is contained in:
Paul Masurel
2017-05-09 23:48:36 +09:00
parent e82ccf9627
commit d3f829dc8a
3 changed files with 14 additions and 24 deletions

View File

@@ -78,15 +78,6 @@ impl<'a> MultiFieldPostingsWriter<'a> {
pub fn suscribe(&mut self, doc: DocId, term: &Term) {
let postings_writer = self.per_field_postings_writers[term.field().0 as usize].deref_mut();
postings_writer.suscribe(&mut self.term_index, doc, 0u32, term, self.heap)
// let recorder: &mut Rec = self.term_index.get_or_create(term);
// let current_doc = recorder.current_doc();
// if current_doc != doc {
// if current_doc != u32::max_value() {
// recorder.close_doc(heap);
// }
// recorder.new_doc(doc, heap);
// }
// recorder.record_position(position, heap);
}
pub fn serialize(&self, serializer: &mut PostingsSerializer) -> Result<()> {
@@ -111,8 +102,8 @@ impl<'a> MultiFieldPostingsWriter<'a> {
}
}
offsets.push((Field(0), term_offsets.len()));
for i in 0..offsets.len() - 1 {
let (field, start) = offsets[i];
for i in 0..(offsets.len() - 1) {
let (field, start) = offsets[i];
let (_, stop) = offsets[i+1];
let postings_writer = &self.per_field_postings_writers[field.0 as usize];
postings_writer.serialize(
@@ -214,13 +205,6 @@ impl<'a, Rec: Recorder + 'static> SpecializedPostingsWriter<'a, Rec> {
impl<'a, Rec: Recorder + 'static> PostingsWriter for SpecializedPostingsWriter<'a, Rec> {
// TODO close documents before serialization.
// fn close(&mut self, heap: &Heap) {
// for recorder in self.term_index.values_mut() {
// recorder.close_doc(heap);
// }
// }
fn suscribe(&mut self, term_index: &mut HashMap, doc: DocId, position: u32, term: &Term, heap: &Heap) {
let recorder: &mut Rec = term_index.get_or_create(term);
let current_doc = recorder.current_doc();
@@ -240,7 +224,6 @@ impl<'a, Rec: Recorder + 'static> PostingsWriter for SpecializedPostingsWriter<'
let mut term = Term::allocate(Field(0), 100);
for &(term_bytes, addr) in term_addrs {
let recorder: &mut Rec = self.heap.get_mut_ref(addr);
recorder.close_doc(heap);
term.set_content(term_bytes);
try!(serializer.new_term(&term));
try!(recorder.serialize(addr, serializer, heap));

View File

@@ -114,6 +114,7 @@ impl Recorder for TermFrequencyRecorder {
self.current_tf = 0;
}
fn serialize(&self,
self_addr: u32,
serializer: &mut PostingsSerializer,
@@ -123,9 +124,15 @@ impl Recorder for TermFrequencyRecorder {
loop {
if let Some(doc) = doc_iter.next() {
if let Some(term_freq) = doc_iter.next() {
try!(serializer.write_doc(doc, term_freq, &EMPTY_ARRAY));
serializer.write_doc(doc, term_freq, &EMPTY_ARRAY)?;
continue;
}
else {
// the last document has not been closed...
// its term freq is self.current_tf.
serializer.write_doc(doc, self.current_tf, &EMPTY_ARRAY)?;
break;
}
}
break;
}
@@ -188,7 +195,8 @@ impl Recorder for TFAndPositionRecorder {
}
}
None => {
panic!("This should never happen. Pleasee report the bug.");
// the last document has not been closed...
break;
}
}
}

View File

@@ -1,9 +1,8 @@
use std::fmt;
use common;
use common::BinarySerializable;
use common::allocate_vec;
use byteorder::{BigEndian, ByteOrder};
use byteorder::{BigEndian, WriteBytesExt, ByteOrder};
use super::Field;
use std::str;
@@ -24,7 +23,7 @@ impl Term {
/// Pre-allocate a term buffer.
pub fn allocate(field: Field, num_bytes: usize) -> Term {
let mut term = Term(Vec::with_capacity(num_bytes));
field.serialize(&mut term.0).expect("Serializing term in a Vec should never fail");
term.0.write_u32::<BigEndian>(field.0).expect("serializing u32 to Vec<u8 should never fail>");
term
}