From 5164d27c3f5310fd36c7ff3ffe1dd29dd03391f9 Mon Sep 17 00:00:00 2001 From: Paul Masurel Date: Fri, 19 Feb 2016 16:57:25 +0900 Subject: [PATCH 1/2] Bu\gfix added load_metas --- src/core/directory.rs | 20 ++++++++++++++++---- src/core/reader.rs | 9 +++++++++ src/core/searcher.rs | 2 -- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/core/directory.rs b/src/core/directory.rs index 8a754a62f..107ad70d6 100644 --- a/src/core/directory.rs +++ b/src/core/directory.rs @@ -3,6 +3,7 @@ use std::path::{PathBuf, Path}; use std::collections::HashMap; use std::collections::hash_map::Entry; use std::fs::File; +use std::fs; use core::schema::Schema; use std::io::Write; use std::io::BufWriter; @@ -20,6 +21,7 @@ use fst::raw::MmapReadOnly; use rustc_serialize::json; use atomicwrites; use tempdir::TempDir; +use std::io::Read; #[derive(Clone, Debug)] pub struct SegmentId(pub String); @@ -132,8 +134,8 @@ impl Directory { } pub fn load_metas(&self,) -> Result<()> { - match self.inner_directory.read() { - Ok(dir) => dir.load_metas(), + match self.inner_directory.write() { + Ok(mut dir) => { dir.load_metas() }, Err(e) => Err(Error::LockError(format!("Could not get read lock {:?} for directory", e))) } } @@ -248,8 +250,18 @@ impl InnerDirectory { Ok(directory) } - pub fn load_metas(&self,) -> Result<()> { - // TODO load segment info + pub fn load_metas(&mut self,) -> Result<()> { + let meta_filepath = self.meta_filepath(); + let meta_data = fs::metadata(&meta_filepath); + if meta_data.is_err() { + // There is no meta data file. + // TODO check that the directory is empty. + return Ok(()); + } + let mut meta_file = File::open(&meta_filepath).unwrap(); + let mut meta_content = String::new(); + meta_file.read_to_string(&mut meta_content); + self.metas = json::decode(&meta_content).unwrap(); Ok(()) } diff --git a/src/core/reader.rs b/src/core/reader.rs index 693e0c74d..a4393c161 100644 --- a/src/core/reader.rs +++ b/src/core/reader.rs @@ -34,6 +34,14 @@ pub struct SegmentPostings { } impl SegmentPostings { + + pub fn empty()-> SegmentPostings { + SegmentPostings { + doc_id: 0, + doc_ids: Vec::new(), + } + } + pub fn from_data(data: &[u8]) -> SegmentPostings { let mut cursor = Cursor::new(data); let doc_freq = cursor.read_u32::().unwrap() as usize; @@ -139,6 +147,7 @@ impl SegmentReader { } None => { segment_postings.clear(); + segment_postings.push(SegmentPostings::empty()); break; } } diff --git a/src/core/searcher.rs b/src/core/searcher.rs index 5390fb746..b7733fbec 100644 --- a/src/core/searcher.rs +++ b/src/core/searcher.rs @@ -12,11 +12,9 @@ impl Searcher { pub fn for_directory(directory: Directory) -> Searcher { let mut segment_readers: Vec = Vec::new(); for segment in directory.segments().into_iter() { - println!("{:?}", segment); match SegmentReader::open(segment.clone()) { Ok(segment_reader) => { segment_readers.push(segment_reader); - println!("opened {:?}", segment); } Err(err) => { // TODO return err From 4d9998fa0d8ce070b008da88ff18a478ddfd390f Mon Sep 17 00:00:00 2001 From: Paul Masurel Date: Fri, 19 Feb 2016 18:39:16 +0900 Subject: [PATCH 2/2] blop --- build.rs | 1 + src/core/writer.rs | 7 ------- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/build.rs b/build.rs index a9998e997..d5b2807f3 100644 --- a/build.rs +++ b/build.rs @@ -4,6 +4,7 @@ fn main() { gcc::Config::new() .cpp(true) .flag("-std=c++11") + .flag("-O3") .include("./cpp/SIMDCompressionAndIntersection/include") .object("cpp/SIMDCompressionAndIntersection/bitpacking.o") .object("cpp/SIMDCompressionAndIntersection/integratedbitpacking.o") diff --git a/src/core/writer.rs b/src/core/writer.rs index 23b254eb2..1d7fd128b 100644 --- a/src/core/writer.rs +++ b/src/core/writer.rs @@ -87,13 +87,6 @@ pub struct SegmentWriter { tokenizer: SimpleTokenizer, } -impl Drop for SegmentWriter { - fn drop(&mut self) { - println!("num tokens {}", self.num_tokens); - } -} - - impl SegmentWriter { fn new() -> SegmentWriter {