From b9b9e9e518178ca07ce79a2bbd0cde5ba45064ab Mon Sep 17 00:00:00 2001 From: Pascal Seitz Date: Fri, 23 Apr 2021 15:14:15 +0200 Subject: [PATCH] move Index::create to IndexBuilder --- src/core/index.rs | 52 +++++++++++++++++++++++------------------------ 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/src/core/index.rs b/src/core/index.rs index ee0699bef..435ebcd96 100644 --- a/src/core/index.rs +++ b/src/core/index.rs @@ -102,12 +102,9 @@ impl IndexBuilder { /// This should only be used for unit tests. pub fn create_in_ram(self) -> Result { let ram_directory = RAMDirectory::create(); - Ok(Index::create( - ram_directory, - self.get_expect_schema()?, - self.get_settings_or_default(), - ) - .expect("Creating a RAMDirectory should never fail")) + Ok(self + .create(ram_directory) + .expect("Creating a RAMDirectory should never fail")) } /// Creates a new index in a given filepath. /// The index will use the `MMapDirectory`. @@ -119,11 +116,7 @@ impl IndexBuilder { if Index::exists(&mmap_directory)? { return Err(TantivyError::IndexAlreadyExists); } - Index::create( - mmap_directory, - self.get_expect_schema()?, - self.get_settings_or_default(), - ) + self.create(mmap_directory) } /// Creates a new index in a temp directory. /// @@ -136,11 +129,7 @@ impl IndexBuilder { #[cfg(feature = "mmap")] pub fn create_from_tempdir(self) -> crate::Result { let mmap_directory = MmapDirectory::create_from_tempdir()?; - Index::create( - mmap_directory, - self.get_expect_schema()?, - self.get_settings_or_default(), - ) + self.create(mmap_directory) } fn get_settings_or_default(&self) -> IndexSettings { self.index_settings @@ -158,11 +147,7 @@ impl IndexBuilder { /// Opens or creates a new index in the provided directory pub fn open_or_create(self, dir: Dir) -> crate::Result { if !Index::exists(&dir)? { - return Index::create( - dir, - self.get_expect_schema()?, - self.get_settings_or_default(), - ); + return self.create(dir); } let index = Index::open(dir)?; if index.schema() == self.get_expect_schema()? { @@ -173,6 +158,21 @@ impl IndexBuilder { )) } } + /// Creates a new index given an implementation of the trait `Directory`. + /// + /// If a directory previously existed, it will be erased. + fn create(self, dir: Dir) -> crate::Result { + let directory = ManagedDirectory::wrap(dir)?; + save_new_metas( + self.get_expect_schema()?, + self.get_settings_or_default(), + &directory, + )?; + let mut metas = IndexMeta::with_schema(self.get_expect_schema()?); + metas.index_settings = self.get_settings_or_default(); + let index = Index::open_from_metas(directory, &metas, SegmentMetaInventory::default()); + Ok(index) + } } /// Search Index @@ -270,12 +270,10 @@ impl Index { schema: Schema, settings: IndexSettings, ) -> crate::Result { - let directory = ManagedDirectory::wrap(dir)?; - save_new_metas(schema.clone(), settings.clone(), &directory)?; - let mut metas = IndexMeta::with_schema(schema); - metas.index_settings = settings; - let index = Index::open_from_metas(directory, &metas, SegmentMetaInventory::default()); - Ok(index) + IndexBuilder::new() + .schema(schema) + .settings(settings) + .create(dir) } /// Creates a new index given a directory and an `IndexMeta`.