From 46e2b73ea5cdce625829a4b732428e5435bc543f Mon Sep 17 00:00:00 2001 From: Paul Masurel Date: Fri, 26 Aug 2016 10:32:49 +0900 Subject: [PATCH] small refactoring --- src/core/index.rs | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/src/core/index.rs b/src/core/index.rs index 0c11525f4..3365b1355 100644 --- a/src/core/index.rs +++ b/src/core/index.rs @@ -75,29 +75,38 @@ impl Index { pub fn create_in_ram(schema: Schema) -> Index { let directory = Box::new(RAMDirectory::create()); - Index::from_directory(directory, schema) + Index::from_directory(directory, schema).unwrap() } pub fn create(directory_path: &Path, schema: Schema) -> Result { let directory = Box::new(try!(MmapDirectory::open(directory_path))); - Ok(Index::from_directory(directory, schema)) + Index::from_directory(directory, schema) } pub fn create_from_tempdir(schema: Schema) -> Result { let directory = Box::new(try!(MmapDirectory::create_from_tempdir())); - Ok(Index::from_directory(directory, schema)) + Index::from_directory(directory, schema) + } + + fn create_from_metas(directory: Box, metas: IndexMeta) -> Result { + let schema = metas.schema.clone(); + Ok(Index { + directory: directory, + metas: Arc::new(RwLock::new(metas)), + schema: schema, + }) + } + + pub fn from_directory(directory: Box, schema: Schema) -> Result { + let mut index = try!(Index::create_from_metas(directory, IndexMeta::with_schema(schema))); + try!(index.save_metas()); + Ok(index) } pub fn open(directory_path: &Path) -> Result { let directory = try!(MmapDirectory::open(directory_path)); let metas = try!(load_metas(&directory)); //< TODO does the directory already exists? - let schema = metas.schema.clone(); - let locked_metas = Arc::new(RwLock::new(metas)); - Ok(Index { - directory: Box::new(directory), - metas: locked_metas, - schema: schema, - }) + Index::create_from_metas(directory.box_clone(), metas) } pub fn docstamp(&self,) -> Result { @@ -120,13 +129,7 @@ impl Index { self.writer_with_num_threads(num_cpus::get()) } - pub fn from_directory(directory: Box, schema: Schema) -> Index { - Index { - metas: Arc::new(RwLock::new(IndexMeta::with_schema(schema.clone()))), - directory: directory, - schema: schema, - } - } + pub fn schema(&self,) -> Schema { self.schema.clone() @@ -213,7 +216,7 @@ impl Index { .into_iter() .map(SegmentReader::open) .collect() - ); + ); Ok(Searcher::from_readers(segment_readers)) } }