From 549b4e66e5a4ae9855be1d2bf3ad1d45a668b4f2 Mon Sep 17 00:00:00 2001 From: Paul Masurel Date: Wed, 6 Feb 2019 00:14:55 +0100 Subject: [PATCH] Using the new API --- examples/basic_search.rs | 8 +-- examples/custom_collector.rs | 3 +- examples/custom_tokenizer.rs | 3 +- examples/deleting_updating_documents.rs | 16 +++-- examples/faceted_search.rs | 4 +- examples/iterating_docs_and_positions.rs | 4 +- examples/snippet.rs | 4 +- examples/stop_words.rs | 4 +- src/collector/facet_collector.rs | 13 ++-- src/collector/int_facet_collector.rs | 3 +- src/collector/multi_collector.rs | 3 +- src/collector/top_field_collector.rs | 8 +-- src/collector/top_score_collector.rs | 3 +- src/core/index.rs | 2 +- src/core/segment_reader.rs | 4 +- src/fastfield/bytes/mod.rs | 4 +- src/fastfield/multivalued/mod.rs | 12 ++-- src/fastfield/multivalued/reader.rs | 3 +- src/functional_test.rs | 5 +- src/indexer/index_writer.rs | 33 ++++------ src/indexer/merger.rs | 68 +++++++++++---------- src/indexer/segment_updater.rs | 21 ++++--- src/lib.rs | 76 ++++++++++++------------ src/postings/mod.rs | 18 ++---- src/postings/segment_postings.rs | 6 +- src/query/all_query.rs | 5 +- src/query/boolean_query/mod.rs | 27 +++++---- src/query/fuzzy_query.rs | 4 +- src/query/phrase_query/mod.rs | 16 ++--- src/query/range_query.rs | 8 +-- src/query/regex_query.rs | 4 +- src/query/term_query/mod.rs | 7 +-- src/reader/mod.rs | 16 ++++- src/snippet/mod.rs | 6 +- src/space_usage/mod.rs | 23 ++++--- src/termdict/mod.rs | 3 +- 36 files changed, 211 insertions(+), 236 deletions(-) diff --git a/examples/basic_search.rs b/examples/basic_search.rs index 3a0a71e2f..690f3e586 100644 --- a/examples/basic_search.rs +++ b/examples/basic_search.rs @@ -170,10 +170,8 @@ fn main() -> tantivy::Result<()> { // // ### Searcher // - // Let's search our index. Start by reloading - // searchers in the index. This should be done - // after every `commit()`. - index.load_searchers()?; + // TODO explain what a reader does + let reader = index.reader(); // We now need to acquire a searcher. // Some search experience might require more than @@ -187,7 +185,7 @@ fn main() -> tantivy::Result<()> { // You should acquire a searcher every time you // start processing a request and // and release it right after your query is finished. - let searcher = index.searcher(); + let searcher = reader.searcher(); // ### Query diff --git a/examples/custom_collector.rs b/examples/custom_collector.rs index 0d19a83e5..7ee68312b 100644 --- a/examples/custom_collector.rs +++ b/examples/custom_collector.rs @@ -170,9 +170,8 @@ fn main() -> tantivy::Result<()> { price => 5_200u64 )); index_writer.commit()?; - index.load_searchers()?; - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let query_parser = QueryParser::for_index(&index, vec![product_name, product_description]); // here we want to get a hit on the 'ken' in Frankenstein diff --git a/examples/custom_tokenizer.rs b/examples/custom_tokenizer.rs index 72b69184d..0e0b0bec8 100644 --- a/examples/custom_tokenizer.rs +++ b/examples/custom_tokenizer.rs @@ -91,9 +91,8 @@ fn main() -> tantivy::Result<()> { increasing confidence in the success of my undertaking."# )); index_writer.commit()?; - index.load_searchers()?; - let searcher = index.searcher(); + let searcher = index.reader().searcher(); // The query parser can interpret human queries. // Here, if the user does not specify which diff --git a/examples/deleting_updating_documents.rs b/examples/deleting_updating_documents.rs index ed59fa8c8..969dcd4f8 100644 --- a/examples/deleting_updating_documents.rs +++ b/examples/deleting_updating_documents.rs @@ -14,12 +14,16 @@ use tantivy::collector::TopDocs; use tantivy::query::TermQuery; use tantivy::schema::*; use tantivy::Index; +use tantivy::IndexReader; // A simple helper function to fetch a single document // given its id from our index. // It will be helpful to check our work. -fn extract_doc_given_isbn(index: &Index, isbn_term: &Term) -> tantivy::Result> { - let searcher = index.searcher(); +fn extract_doc_given_isbn( + reader: &IndexReader, + isbn_term: &Term, +) -> tantivy::Result> { + let searcher = reader.searcher(); // This is the simplest query you can think of. // It matches all of the documents containing a specific term. @@ -85,12 +89,12 @@ fn main() -> tantivy::Result<()> { isbn => "978-9176370711", )); index_writer.commit()?; - index.load_searchers()?; + let reader = index.reader(); let frankenstein_isbn = Term::from_field_text(isbn, "978-9176370711"); // Oops our frankenstein doc seems mispelled - let frankenstein_doc_misspelled = extract_doc_given_isbn(&index, &frankenstein_isbn)?.unwrap(); + let frankenstein_doc_misspelled = extract_doc_given_isbn(&reader, &frankenstein_isbn)?.unwrap(); assert_eq!( schema.to_json(&frankenstein_doc_misspelled), r#"{"isbn":["978-9176370711"],"title":["Frankentein"]}"#, @@ -129,10 +133,10 @@ fn main() -> tantivy::Result<()> { // Everything happened as if the document was updated. index_writer.commit()?; // We reload our searcher to make our change available to clients. - index.load_searchers()?; + reader.load_searchers()?; // No more typo! - let frankenstein_new_doc = extract_doc_given_isbn(&index, &frankenstein_isbn)?.unwrap(); + let frankenstein_new_doc = extract_doc_given_isbn(&reader, &frankenstein_isbn)?.unwrap(); assert_eq!( schema.to_json(&frankenstein_new_doc), r#"{"isbn":["978-9176370711"],"title":["Frankenstein"]}"#, diff --git a/examples/faceted_search.rs b/examples/faceted_search.rs index 9d68f2a4e..09ea4627b 100644 --- a/examples/faceted_search.rs +++ b/examples/faceted_search.rs @@ -55,9 +55,9 @@ fn main() -> tantivy::Result<()> { index_writer.commit()?; - index.load_searchers()?; + let reader = index.reader(); - let searcher = index.searcher(); + let searcher = reader.searcher(); let mut facet_collector = FacetCollector::for_field(tags); facet_collector.add_facet("/pools"); diff --git a/examples/iterating_docs_and_positions.rs b/examples/iterating_docs_and_positions.rs index 62513ea7a..5ff2d0183 100644 --- a/examples/iterating_docs_and_positions.rs +++ b/examples/iterating_docs_and_positions.rs @@ -33,9 +33,9 @@ fn main() -> tantivy::Result<()> { index_writer.add_document(doc!(title => "The modern Promotheus")); index_writer.commit()?; - index.load_searchers()?; + let reader = index.reader(); - let searcher = index.searcher(); + let searcher = reader.searcher(); // A tantivy index is actually a collection of segments. // Similarly, a searcher just wraps a list `segment_reader`. diff --git a/examples/snippet.rs b/examples/snippet.rs index 35ba07557..acf25051d 100644 --- a/examples/snippet.rs +++ b/examples/snippet.rs @@ -48,9 +48,7 @@ fn main() -> tantivy::Result<()> { // ... index_writer.commit()?; - index.load_searchers()?; - - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let query_parser = QueryParser::for_index(&index, vec![title, body]); let query = query_parser.parse_query("sycamore spring")?; diff --git a/examples/stop_words.rs b/examples/stop_words.rs index cdfe054e8..db97cc90c 100644 --- a/examples/stop_words.rs +++ b/examples/stop_words.rs @@ -96,9 +96,9 @@ fn main() -> tantivy::Result<()> { index_writer.commit()?; - index.load_searchers()?; + let reader = index.reader(); - let searcher = index.searcher(); + let searcher = reader.searcher(); let query_parser = QueryParser::for_index(&index, vec![title, body]); diff --git a/src/collector/facet_collector.rs b/src/collector/facet_collector.rs index 083bd65ae..c4e3c2fa2 100644 --- a/src/collector/facet_collector.rs +++ b/src/collector/facet_collector.rs @@ -483,8 +483,7 @@ mod tests { index_writer.add_document(doc); } index_writer.commit().unwrap(); - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let mut facet_collector = FacetCollector::for_field(facet_field); facet_collector.add_facet(Facet::from("/top1")); let counts = searcher.search(&AllQuery, &facet_collector).unwrap(); @@ -532,8 +531,7 @@ mod tests { facet_field => Facet::from_text(&"/subjects/B/b"), )); index_writer.commit().unwrap(); - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let searcher = index.reader().searcher(); assert_eq!(searcher.num_docs(), 1); let mut facet_collector = FacetCollector::for_field(facet_field); facet_collector.add_facet("/subjects"); @@ -579,9 +577,7 @@ mod tests { index_writer.add_document(doc); } index_writer.commit().unwrap(); - index.load_searchers().unwrap(); - - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let mut facet_collector = FacetCollector::for_field(facet_field); facet_collector.add_facet("/facet"); @@ -635,8 +631,7 @@ mod bench { index_writer.add_document(doc); } index_writer.commit().unwrap(); - index.load_searchers().unwrap(); - + let reader = index.reader(); b.iter(|| { let searcher = index.searcher(); let facet_collector = FacetCollector::for_field(facet_field); diff --git a/src/collector/int_facet_collector.rs b/src/collector/int_facet_collector.rs index 01f00cc37..4232343e6 100644 --- a/src/collector/int_facet_collector.rs +++ b/src/collector/int_facet_collector.rs @@ -101,8 +101,7 @@ mod tests { assert_eq!(index_writer.commit().unwrap(), 10u64); } - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let mut ffvf_i64: IntFacetCollector = IntFacetCollector::new(num_field_i64); let mut ffvf_u64: IntFacetCollector = IntFacetCollector::new(num_field_u64); diff --git a/src/collector/multi_collector.rs b/src/collector/multi_collector.rs index f12c648a4..bb8362856 100644 --- a/src/collector/multi_collector.rs +++ b/src/collector/multi_collector.rs @@ -278,8 +278,7 @@ mod tests { index_writer.add_document(doc!(text=>"abc")); index_writer.commit().unwrap(); } - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let term = Term::from_field_text(text, "abc"); let query = TermQuery::new(term, IndexRecordOption::Basic); diff --git a/src/collector/top_field_collector.rs b/src/collector/top_field_collector.rs index c6c5c29a7..804eee291 100644 --- a/src/collector/top_field_collector.rs +++ b/src/collector/top_field_collector.rs @@ -171,7 +171,7 @@ mod tests { size => 16u64, )); }); - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let top_collector = TopDocs::with_limit(4).order_by_field(size); let top_docs: Vec<(u64, DocAddress)> = searcher.search(&query, &top_collector).unwrap(); @@ -198,7 +198,7 @@ mod tests { size => 12u64, )); }); - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let top_collector: TopDocsByField = TopDocs::with_limit(4).order_by_field(Field(2)); let segment_reader = searcher.segment_reader(0u32); top_collector @@ -218,7 +218,7 @@ mod tests { size => 12u64, )); }); - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let segment = searcher.segment_reader(0); let top_collector: TopDocsByField = TopDocs::with_limit(4).order_by_field(size); assert_matches!( @@ -241,8 +241,6 @@ mod tests { let mut index_writer = index.writer_with_num_threads(1, 3_000_000).unwrap(); doc_adder(&mut index_writer); index_writer.commit().unwrap(); - index.load_searchers().unwrap(); - let query_parser = QueryParser::for_index(&index, vec![query_field]); let query = query_parser.parse_query(query).unwrap(); (index, query) diff --git a/src/collector/top_score_collector.rs b/src/collector/top_score_collector.rs index 869022686..fcff13b04 100644 --- a/src/collector/top_score_collector.rs +++ b/src/collector/top_score_collector.rs @@ -148,7 +148,6 @@ mod tests { index_writer.add_document(doc!(text_field=>"I like Droopy")); assert!(index_writer.commit().is_ok()); } - index.load_searchers().unwrap(); index } @@ -159,6 +158,7 @@ mod tests { let query_parser = QueryParser::for_index(&index, vec![field]); let text_query = query_parser.parse_query("droopy tax").unwrap(); let score_docs: Vec<(Score, DocAddress)> = index + .reader() .searcher() .search(&text_query, &TopDocs::with_limit(4)) .unwrap(); @@ -179,6 +179,7 @@ mod tests { let query_parser = QueryParser::for_index(&index, vec![field]); let text_query = query_parser.parse_query("droopy tax").unwrap(); let score_docs: Vec<(Score, DocAddress)> = index + .reader() .searcher() .search(&text_query, &TopDocs::with_limit(2)) .unwrap(); diff --git a/src/core/index.rs b/src/core/index.rs index 5db404ca0..245ae0068 100644 --- a/src/core/index.rs +++ b/src/core/index.rs @@ -187,7 +187,7 @@ impl Index { } } - pub fn reader(&self, reload_policy: ReloadPolicy) -> IndexReader { + pub fn reader(&self) -> IndexReader { self.reader_builder().into() } diff --git a/src/core/segment_reader.rs b/src/core/segment_reader.rs index 597ecae39..bc35f4624 100644 --- a/src/core/segment_reader.rs +++ b/src/core/segment_reader.rs @@ -477,9 +477,7 @@ mod test { // ok, now we should have a deleted doc index_writer2.commit().unwrap(); } - - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let docs: Vec = searcher.segment_reader(0).doc_ids_alive().collect(); assert_eq!(vec![0u32, 2u32], docs); } diff --git a/src/fastfield/bytes/mod.rs b/src/fastfield/bytes/mod.rs index 1a551ecc0..4ad2eead5 100644 --- a/src/fastfield/bytes/mod.rs +++ b/src/fastfield/bytes/mod.rs @@ -22,9 +22,7 @@ mod tests { index_writer.add_document(doc!(field=>vec![1u8, 3, 5, 7, 9])); index_writer.add_document(doc!(field=>vec![0u8; 1000])); assert!(index_writer.commit().is_ok()); - - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let reader = searcher.segment_reader(0); let bytes_reader = reader.bytes_fast_field_reader(field).unwrap(); diff --git a/src/fastfield/multivalued/mod.rs b/src/fastfield/multivalued/mod.rs index 733f211bb..1853f5a2d 100644 --- a/src/fastfield/multivalued/mod.rs +++ b/src/fastfield/multivalued/mod.rs @@ -28,11 +28,12 @@ mod tests { index_writer.add_document(doc!(field=>5u64, field=>20u64,field=>1u64)); assert!(index_writer.commit().is_ok()); - index.load_searchers().unwrap(); - let searcher = index.searcher(); - let reader = searcher.segment_reader(0); + let searcher = index.reader().searcher(); + let segment_reader = searcher.segment_reader(0); let mut vals = Vec::new(); - let multi_value_reader = reader.multi_fast_field_reader::(field).unwrap(); + let multi_value_reader = segment_reader + .multi_fast_field_reader::(field) + .unwrap(); { multi_value_reader.get_vals(2, &mut vals); assert_eq!(&vals, &[4u64]); @@ -63,8 +64,7 @@ mod tests { index_writer.add_document(doc!(field=> -5i64, field => -20i64, field=>1i64)); assert!(index_writer.commit().is_ok()); - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let reader = searcher.segment_reader(0); let mut vals = Vec::new(); let multi_value_reader = reader.multi_fast_field_reader::(field).unwrap(); diff --git a/src/fastfield/multivalued/reader.rs b/src/fastfield/multivalued/reader.rs index d7df15a37..7a27f716b 100644 --- a/src/fastfield/multivalued/reader.rs +++ b/src/fastfield/multivalued/reader.rs @@ -75,8 +75,7 @@ mod tests { index_writer.add_document(doc); } index_writer.commit().expect("Commit failed"); - index.load_searchers().expect("Reloading searchers"); - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let segment_reader = searcher.segment_reader(0); let mut facet_reader = segment_reader.facet_reader(facet_field).unwrap(); diff --git a/src/functional_test.rs b/src/functional_test.rs index 7e023c29e..6b3d6ac89 100644 --- a/src/functional_test.rs +++ b/src/functional_test.rs @@ -22,6 +22,7 @@ fn test_indexing() { let schema = schema_builder.build(); let index = Index::create_from_tempdir(schema).unwrap(); + let reader = index.reader(); let mut rng = thread_rng(); @@ -36,8 +37,8 @@ fn test_indexing() { index_writer.commit().expect("Commit failed"); committed_docs.extend(&uncommitted_docs); uncommitted_docs.clear(); - index.load_searchers().unwrap(); - let searcher = index.searcher(); + reader.load_searchers().unwrap(); + let searcher = reader.searcher(); // check that everything is correct. check_index_content(&searcher, &committed_docs); } else { diff --git a/src/indexer/index_writer.rs b/src/indexer/index_writer.rs index d2a2f02c5..ec0d3a0f2 100644 --- a/src/indexer/index_writer.rs +++ b/src/indexer/index_writer.rs @@ -722,9 +722,9 @@ mod tests { let mut schema_builder = schema::Schema::builder(); let text_field = schema_builder.add_text_field("text", schema::TEXT); let index = Index::create_in_ram(schema_builder.build()); - + let reader = index.reader(); let num_docs_containing = |s: &str| { - let searcher = index.searcher(); + let searcher = reader.searcher(); let term = Term::from_field_text(text_field, s); searcher.doc_freq(&term) }; @@ -742,13 +742,13 @@ mod tests { index_writer.add_document(doc!(text_field=>"c")); } assert!(index_writer.commit().is_ok()); - index.load_searchers().unwrap(); + reader.load_searchers().unwrap(); assert_eq!(num_docs_containing("a"), 0); assert_eq!(num_docs_containing("b"), 1); assert_eq!(num_docs_containing("c"), 1); } - index.load_searchers().unwrap(); - index.searcher(); + reader.load_searchers().unwrap(); + reader.searcher(); } #[test] @@ -756,32 +756,29 @@ mod tests { let mut schema_builder = schema::Schema::builder(); let text_field = schema_builder.add_text_field("text", schema::TEXT); let index = Index::create_in_ram(schema_builder.build()); + let reader = index.reader(); let num_docs_containing = |s: &str| { - let searcher = index.searcher(); let term_a = Term::from_field_text(text_field, s); - searcher.doc_freq(&term_a) + reader.searcher().doc_freq(&term_a) }; { // writing the segment let mut index_writer = index.writer(12_000_000).unwrap(); // create 8 segments with 100 tiny docs for _doc in 0..100 { - let mut doc = Document::default(); - doc.add_text(text_field, "a"); - index_writer.add_document(doc); + index_writer.add_document(doc!(text_field=>"a")); } index_writer.commit().expect("commit failed"); for _doc in 0..100 { - let mut doc = Document::default(); - doc.add_text(text_field, "a"); - index_writer.add_document(doc); + index_writer.add_document(doc!(text_field=>"a")); } // this should create 8 segments and trigger a merge. index_writer.commit().expect("commit failed"); index_writer .wait_merging_threads() .expect("waiting merging thread failed"); - index.load_searchers().unwrap(); + + reader.load_searchers().unwrap(); assert_eq!(num_docs_containing("a"), 200); assert!(index.searchable_segments().unwrap().len() < 8); @@ -848,11 +845,9 @@ mod tests { } index_writer.commit().unwrap(); } - index.load_searchers().unwrap(); let num_docs_containing = |s: &str| { - let searcher = index.searcher(); let term_a = Term::from_field_text(text_field, s); - searcher.doc_freq(&term_a) + index.reader().searcher().doc_freq(&term_a) }; assert_eq!(num_docs_containing("a"), 0); assert_eq!(num_docs_containing("b"), 100); @@ -884,11 +879,9 @@ mod tests { index_writer.add_document(doc!(text_field => "b")); } assert!(index_writer.commit().is_err()); - index.load_searchers().unwrap(); let num_docs_containing = |s: &str| { - let searcher = index.searcher(); let term_a = Term::from_field_text(text_field, s); - searcher.doc_freq(&term_a) + index.reader().searcher().doc_freq(&term_a) }; assert_eq!(num_docs_containing("a"), 100); assert_eq!(num_docs_containing("b"), 0); diff --git a/src/indexer/merger.rs b/src/indexer/merger.rs index 311240102..d41733074 100644 --- a/src/indexer/merger.rs +++ b/src/indexer/merger.rs @@ -675,7 +675,7 @@ mod tests { let score_field = schema_builder.add_u64_field("score", score_fieldtype); let bytes_score_field = schema_builder.add_bytes_field("score_bytes"); let index = Index::create_in_ram(schema_builder.build()); - + let reader = index.reader(); let add_score_bytes = |doc: &mut Document, score: u32| { let mut bytes = Vec::new(); bytes @@ -744,8 +744,8 @@ mod tests { index_writer.wait_merging_threads().unwrap(); } { - index.load_searchers().unwrap(); - let searcher = index.searcher(); + reader.load_searchers().unwrap(); + let searcher = reader.searcher(); let get_doc_ids = |terms: Vec| { let query = BooleanQuery::new_multiterms_query(terms); let top_docs = searcher.search(&query, &TestCollector).unwrap(); @@ -837,7 +837,7 @@ mod tests { let bytes_score_field = schema_builder.add_bytes_field("score_bytes"); let index = Index::create_in_ram(schema_builder.build()); let mut index_writer = index.writer_with_num_threads(1, 3_000_000).unwrap(); - + let reader = index.reader(); let search_term = |searcher: &Searcher, term: Term| { let collector = FastFieldTestCollector::for_field(score_field); let bytes_collector = BytesFastFieldTestCollector::for_field(bytes_score_field); @@ -874,8 +874,8 @@ mod tests { bytes_score_field => vec![0u8, 0, 0, 3], )); index_writer.commit().expect("committed"); - index.load_searchers().unwrap(); - let ref searcher = *index.searcher(); + reader.load_searchers().unwrap(); + let searcher = reader.searcher(); assert_eq!(searcher.num_docs(), 2); assert_eq!(searcher.segment_readers()[0].num_docs(), 2); assert_eq!(searcher.segment_readers()[0].max_doc(), 3); @@ -921,8 +921,8 @@ mod tests { bytes_score_field => vec![0u8, 0, 27, 88], )); index_writer.commit().expect("committed"); - index.load_searchers().unwrap(); - let searcher = index.searcher(); + reader.load_searchers().unwrap(); + let searcher = reader.searcher(); assert_eq!(searcher.segment_readers().len(), 2); assert_eq!(searcher.num_docs(), 3); @@ -983,8 +983,8 @@ mod tests { .expect("Failed to initiate merge") .wait() .expect("Merging failed"); - index.load_searchers().unwrap(); - let searcher = index.searcher(); + reader.load_searchers().unwrap(); + let searcher = reader.searcher(); assert_eq!(searcher.segment_readers().len(), 1); assert_eq!(searcher.num_docs(), 3); assert_eq!(searcher.segment_readers()[0].num_docs(), 3); @@ -1029,8 +1029,8 @@ mod tests { index_writer.delete_term(Term::from_field_text(text_field, "c")); index_writer.commit().unwrap(); - index.load_searchers().unwrap(); - let searcher = index.searcher(); + reader.load_searchers().unwrap(); + let searcher = reader.searcher(); assert_eq!(searcher.segment_readers().len(), 1); assert_eq!(searcher.num_docs(), 2); assert_eq!(searcher.segment_readers()[0].num_docs(), 2); @@ -1080,9 +1080,9 @@ mod tests { .expect("Failed to initiate merge") .wait() .expect("Merging failed"); - index.load_searchers().unwrap(); + reader.load_searchers().unwrap(); - let ref searcher = *index.searcher(); + let searcher = reader.searcher(); assert_eq!(searcher.segment_readers().len(), 1); assert_eq!(searcher.num_docs(), 2); assert_eq!(searcher.segment_readers()[0].num_docs(), 2); @@ -1130,9 +1130,9 @@ mod tests { let segment_ids = index .searchable_segment_ids() .expect("Searchable segments failed."); - index.load_searchers().unwrap(); + reader.load_searchers().unwrap(); - let ref searcher = *index.searcher(); + let searcher = reader.searcher(); assert!(segment_ids.is_empty()); assert!(searcher.segment_readers().is_empty()); assert_eq!(searcher.num_docs(), 0); @@ -1144,6 +1144,7 @@ mod tests { let mut schema_builder = schema::Schema::builder(); let facet_field = schema_builder.add_facet_field("facet"); let index = Index::create_in_ram(schema_builder.build()); + let reader = index.reader(); { let mut index_writer = index.writer_with_num_threads(1, 3_000_000).unwrap(); let index_doc = |index_writer: &mut IndexWriter, doc_facets: &[&str]| { @@ -1173,9 +1174,9 @@ mod tests { index_writer.commit().expect("committed"); } - index.load_searchers().unwrap(); + reader.load_searchers().unwrap(); let test_searcher = |expected_num_docs: usize, expected: &[(&str, u64)]| { - let searcher = index.searcher(); + let searcher = reader.searcher(); let mut facet_collector = FacetCollector::for_field(facet_field); facet_collector.add_facet(Facet::from("/top")); let (count, facet_counts) = searcher @@ -1217,7 +1218,7 @@ mod tests { .wait() .expect("Merging failed"); index_writer.wait_merging_threads().unwrap(); - index.load_searchers().unwrap(); + reader.load_searchers().unwrap(); test_searcher( 11, &[ @@ -1238,7 +1239,7 @@ mod tests { let facet_term = Term::from_facet(facet_field, &facet); index_writer.delete_term(facet_term); index_writer.commit().unwrap(); - index.load_searchers().unwrap(); + reader.load_searchers().unwrap(); test_searcher( 9, &[ @@ -1263,8 +1264,8 @@ mod tests { index_writer.commit().expect("commit failed"); index_writer.add_document(doc!(int_field => 1u64)); index_writer.commit().expect("commit failed"); - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let reader = index.reader(); + let searcher = reader.searcher(); assert_eq!(searcher.num_docs(), 2); index_writer.delete_term(Term::from_field_u64(int_field, 1)); let segment_ids = index @@ -1275,10 +1276,10 @@ mod tests { .expect("Failed to initiate merge") .wait() .expect("Merging failed"); - index.load_searchers().unwrap(); + reader.load_searchers().unwrap(); // commit has not been called yet. The document should still be // there. - assert_eq!(index.searcher().num_docs(), 2); + assert_eq!(reader.searcher().num_docs(), 2); } #[test] @@ -1289,7 +1290,7 @@ mod tests { .set_indexed(); let int_field = schema_builder.add_u64_field("intvals", int_options); let index = Index::create_in_ram(schema_builder.build()); - + let reader = index.reader(); { let mut index_writer = index.writer_with_num_threads(1, 3_000_000).unwrap(); let mut doc = Document::default(); @@ -1310,8 +1311,8 @@ mod tests { .expect("Merging failed"); // assert delete has not been committed - index.load_searchers().unwrap(); - let searcher = index.searcher(); + reader.load_searchers().unwrap(); + let searcher = reader.searcher(); assert_eq!(searcher.num_docs(), 2); index_writer.commit().unwrap(); @@ -1319,8 +1320,8 @@ mod tests { index_writer.wait_merging_threads().unwrap(); } - index.load_searchers().unwrap(); - let searcher = index.searcher(); + reader.load_searchers().unwrap(); + let searcher = reader.searcher(); assert_eq!(searcher.num_docs(), 0); } @@ -1360,9 +1361,10 @@ mod tests { index_writer.commit().expect("committed"); } - index.load_searchers().unwrap(); + let reader = index.reader(); + reader.load_searchers().unwrap(); - let searcher = index.searcher(); + let searcher = reader.searcher(); let mut vals: Vec = Vec::new(); @@ -1432,10 +1434,10 @@ mod tests { index_writer.wait_merging_threads().unwrap(); } - index.load_searchers().unwrap(); + reader.load_searchers().unwrap(); { - let searcher = index.searcher(); + let searcher = reader.searcher(); println!( "{:?}", searcher diff --git a/src/indexer/segment_updater.rs b/src/indexer/segment_updater.rs index 9f8e9577f..c5d2359a8 100644 --- a/src/indexer/segment_updater.rs +++ b/src/indexer/segment_updater.rs @@ -565,9 +565,8 @@ mod tests { index_writer.delete_term(term); assert!(index_writer.commit().is_ok()); } - - index.load_searchers().unwrap(); - assert_eq!(index.searcher().num_docs(), 302); + let reader = index.reader(); + assert_eq!(reader.searcher().num_docs(), 302); { index_writer @@ -575,9 +574,9 @@ mod tests { .expect("waiting for merging threads"); } - index.load_searchers().unwrap(); - assert_eq!(index.searcher().segment_readers().len(), 1); - assert_eq!(index.searcher().num_docs(), 302); + reader.load_searchers().unwrap(); + assert_eq!(reader.searcher().segment_readers().len(), 1); + assert_eq!(reader.searcher().num_docs(), 302); } #[test] @@ -636,18 +635,18 @@ mod tests { .expect("waiting for merging threads"); } - index.load_searchers().unwrap(); - assert_eq!(index.searcher().num_docs(), 0); + let reader = index.reader(); + assert_eq!(reader.searcher().num_docs(), 0); let seg_ids = index .searchable_segment_ids() .expect("Searchable segments failed."); assert!(seg_ids.is_empty()); - index.load_searchers().unwrap(); - assert_eq!(index.searcher().num_docs(), 0); + reader.load_searchers().unwrap(); + assert_eq!(reader.searcher().num_docs(), 0); // empty segments should be erased assert!(index.searchable_segment_metas().unwrap().is_empty()); - assert!(index.searcher().segment_readers().is_empty()); + assert!(reader.searcher().segment_readers().is_empty()); } } diff --git a/src/lib.rs b/src/lib.rs index cee255652..36922344e 100755 --- a/src/lib.rs +++ b/src/lib.rs @@ -390,9 +390,8 @@ mod tests { index_writer.commit().unwrap(); } { - let index_reader = index.reader(ReloadPolicy::MANUAL); - indexer_reader.load_searchers().unwrap(); - let searcher = index.searcher(); + let reader = index.reader(); + let searcher = reader.searcher(); let term_a = Term::from_field_text(text_field, "a"); assert_eq!(searcher.doc_freq(&term_a), 3); let term_b = Term::from_field_text(text_field, "b"); @@ -419,8 +418,8 @@ mod tests { index_writer.commit().unwrap(); } { - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let index_reader = index.reader(); + let searcher = index_reader.searcher(); let reader = searcher.segment_reader(0); { let fieldnorm_reader = reader.get_fieldnorms_reader(text_field); @@ -455,8 +454,8 @@ mod tests { index_writer.commit().unwrap(); } { - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let reader = index.reader(); + let searcher = reader.searcher(); let segment_reader: &SegmentReader = searcher.segment_reader(0); let fieldnorms_reader = segment_reader.get_fieldnorms_reader(text_field); assert_eq!(fieldnorms_reader.fieldnorm(0), 3); @@ -505,8 +504,8 @@ mod tests { index_writer.commit().unwrap(); } { - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let reader = index.reader(); + let searcher = reader.searcher(); let reader = searcher.segment_reader(0); let inverted_index = reader.inverted_index(text_field); assert!(inverted_index @@ -541,8 +540,8 @@ mod tests { index_writer.rollback().unwrap(); } { - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let index_reader = index.reader(); + let searcher = index_reader.searcher(); let reader = searcher.segment_reader(0); let inverted_index = reader.inverted_index(term_abcd.field()); @@ -578,10 +577,10 @@ mod tests { index_writer.commit().unwrap(); } { - index.load_searchers().unwrap(); - let searcher = index.searcher(); - let reader = searcher.segment_reader(0); - let inverted_index = reader.inverted_index(term_abcd.field()); + let reader = index.reader(); + let searcher = reader.searcher(); + let segment_reader = searcher.segment_reader(0); + let inverted_index = segment_reader.inverted_index(term_abcd.field()); assert!(inverted_index .read_postings(&term_abcd, IndexRecordOption::WithFreqsAndPositions) .is_none()); @@ -589,25 +588,25 @@ mod tests { let mut postings = inverted_index .read_postings(&term_a, IndexRecordOption::WithFreqsAndPositions) .unwrap(); - assert!(!advance_undeleted(&mut postings, reader)); + assert!(!advance_undeleted(&mut postings, segment_reader)); } { let mut postings = inverted_index .read_postings(&term_b, IndexRecordOption::WithFreqsAndPositions) .unwrap(); - assert!(advance_undeleted(&mut postings, reader)); + assert!(advance_undeleted(&mut postings, segment_reader)); assert_eq!(postings.doc(), 3); - assert!(advance_undeleted(&mut postings, reader)); + assert!(advance_undeleted(&mut postings, segment_reader)); assert_eq!(postings.doc(), 4); - assert!(!advance_undeleted(&mut postings, reader)); + assert!(!advance_undeleted(&mut postings, segment_reader)); } { let mut postings = inverted_index .read_postings(&term_c, IndexRecordOption::WithFreqsAndPositions) .unwrap(); - assert!(advance_undeleted(&mut postings, reader)); + assert!(advance_undeleted(&mut postings, segment_reader)); assert_eq!(postings.doc(), 4); - assert!(!advance_undeleted(&mut postings, reader)); + assert!(!advance_undeleted(&mut postings, segment_reader)); } } } @@ -622,8 +621,8 @@ mod tests { let mut index_writer = index.writer_with_num_threads(1, 3_000_000).unwrap(); index_writer.add_document(doc!(field=>1u64)); index_writer.commit().unwrap(); - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let reader = index.reader(); + let searcher = reader.searcher(); let term = Term::from_field_u64(field, 1u64); let mut postings = searcher .segment_reader(0) @@ -646,8 +645,8 @@ mod tests { let negative_val = -1i64; index_writer.add_document(doc!(value_field => negative_val)); index_writer.commit().unwrap(); - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let reader = index.reader(); + let searcher = reader.searcher(); let term = Term::from_field_i64(value_field, negative_val); let mut postings = searcher .segment_reader(0) @@ -669,8 +668,9 @@ mod tests { let mut index_writer = index.writer_with_num_threads(2, 6_000_000).unwrap(); index_writer.add_document(doc!(text_field=>"a")); assert!(index_writer.commit().is_ok()); - assert!(index.load_searchers().is_ok()); - let searcher = index.searcher(); + let reader = index.reader(); + assert!(reader.load_searchers().is_ok()); + let searcher = reader.searcher(); let segment_reader = searcher.segment_reader(0); segment_reader.inverted_index(absent_field); //< should not panic } @@ -681,6 +681,7 @@ mod tests { let text_field = schema_builder.add_text_field("text", TEXT); let schema = schema_builder.build(); let index = Index::create_in_ram(schema); + let reader = index.reader(); // writing the segment let mut index_writer = index.writer_with_num_threads(2, 6_000_000).unwrap(); @@ -706,8 +707,8 @@ mod tests { remove_document(&mut index_writer, "38"); remove_document(&mut index_writer, "34"); index_writer.commit().unwrap(); - index.load_searchers().unwrap(); - let searcher = index.searcher(); + reader.load_searchers().unwrap(); + let searcher = reader.searcher(); assert_eq!(searcher.num_docs(), 6); } @@ -727,8 +728,8 @@ mod tests { index_writer.commit().unwrap(); } { - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let index_reader = index.reader(); + let searcher = index_reader.searcher(); let reader = searcher.segment_reader(0); let inverted_index = reader.inverted_index(text_field); let term_abcd = Term::from_field_text(text_field, "abcd"); @@ -752,7 +753,7 @@ mod tests { let text_field = schema_builder.add_text_field("text", TEXT); let schema = schema_builder.build(); let index = Index::create_in_ram(schema); - + let reader = index.reader(); { // writing the segment let mut index_writer = index.writer_with_num_threads(1, 3_000_000).unwrap(); @@ -762,8 +763,8 @@ mod tests { index_writer.commit().unwrap(); } { - index.load_searchers().unwrap(); - let searcher = index.searcher(); + reader.load_searchers().unwrap(); + let searcher = reader.searcher(); let get_doc_ids = |terms: Vec| { let query = BooleanQuery::new_multiterms_query(terms); let topdocs = searcher.search(&query, &TestCollector).unwrap(); @@ -823,7 +824,7 @@ mod tests { } index_writer.commit().unwrap(); } - index.searcher(); + index.reader().searcher(); } #[test] @@ -860,9 +861,8 @@ mod tests { index_writer.add_document(document); index_writer.commit().unwrap(); } - - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let reader = index.reader(); + let searcher = reader.searcher(); let segment_reader: &SegmentReader = searcher.segment_reader(0); { let fast_field_reader_res = segment_reader.fast_field_reader::(text_field); diff --git a/src/postings/mod.rs b/src/postings/mod.rs index c94e887a9..5b4b14e78 100644 --- a/src/postings/mod.rs +++ b/src/postings/mod.rs @@ -101,9 +101,8 @@ pub mod tests { } index_writer.add_document(doc!(title => r#"abc be be be be abc"#)); index_writer.commit().unwrap(); - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let inverted_index = searcher.segment_reader(0u32).inverted_index(title); let term = Term::from_field_text(title, "abc"); @@ -293,9 +292,8 @@ pub mod tests { } assert!(index_writer.commit().is_ok()); } - index.load_searchers().unwrap(); let term_a = Term::from_field_text(text_field, "a"); - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let segment_reader = searcher.segment_reader(0); let mut postings = segment_reader .inverted_index(text_field) @@ -332,10 +330,9 @@ pub mod tests { } assert!(index_writer.commit().is_ok()); } - index.load_searchers().unwrap(); index }; - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let segment_reader = searcher.segment_reader(0); // check that the basic usage works @@ -403,8 +400,7 @@ pub mod tests { index_writer.delete_term(term_0); assert!(index_writer.commit().is_ok()); } - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let segment_reader = searcher.segment_reader(0); // make sure seeking still works @@ -451,12 +447,9 @@ pub mod tests { { let mut index_writer = index.writer_with_num_threads(1, 3_000_000).unwrap(); index_writer.delete_term(term_1); - assert!(index_writer.commit().is_ok()); } - index.load_searchers().unwrap(); - - let searcher = index.searcher(); + let searcher = index.reader().searcher(); // finally, check that it's empty { @@ -512,7 +505,6 @@ pub mod tests { } assert!(index_writer.commit().is_ok()); } - index.load_searchers().unwrap(); index }; } diff --git a/src/postings/segment_postings.rs b/src/postings/segment_postings.rs index a5e260619..9c6f57314 100644 --- a/src/postings/segment_postings.rs +++ b/src/postings/segment_postings.rs @@ -775,8 +775,7 @@ mod tests { last_doc = doc + 1; } index_writer.commit().unwrap(); - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let segment_reader = searcher.segment_reader(0); let inverted_index = segment_reader.inverted_index(int_field); let term = Term::from_field_u64(int_field, 0u64); @@ -844,8 +843,7 @@ mod tests { index_writer.add_document(doc); } index_writer.commit().unwrap(); - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let segment_reader = searcher.segment_reader(0); let mut block_segments; diff --git a/src/query/all_query.rs b/src/query/all_query.rs index e6468e2d7..32018956b 100644 --- a/src/query/all_query.rs +++ b/src/query/all_query.rs @@ -101,8 +101,9 @@ mod tests { index_writer.commit().unwrap(); index_writer.add_document(doc!(field=>"ccc")); index_writer.commit().unwrap(); - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let reader = index.reader(); + reader.load_searchers().unwrap(); + let searcher = reader.searcher(); let weight = AllQuery.weight(&searcher, false).unwrap(); { let reader = searcher.segment_reader(0); diff --git a/src/query/boolean_query/mod.rs b/src/query/boolean_query/mod.rs index b450f7f0a..8fe91ca69 100644 --- a/src/query/boolean_query/mod.rs +++ b/src/query/boolean_query/mod.rs @@ -51,7 +51,6 @@ mod tests { } assert!(index_writer.commit().is_ok()); } - index.load_searchers().unwrap(); (index, text_field) } @@ -60,7 +59,8 @@ mod tests { let (index, text_field) = aux_test_helper(); let query_parser = QueryParser::for_index(&index, vec![text_field]); let query = query_parser.parse_query("(+a +b) d").unwrap(); - assert_eq!(query.count(&*index.searcher()).unwrap(), 3); + let searcher = index.reader().searcher(); + assert_eq!(query.count(&searcher).unwrap(), 3); } #[test] @@ -68,7 +68,7 @@ mod tests { let (index, text_field) = aux_test_helper(); let query_parser = QueryParser::for_index(&index, vec![text_field]); let query = query_parser.parse_query("+a").unwrap(); - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let weight = query.weight(&searcher, true).unwrap(); let scorer = weight.scorer(searcher.segment_reader(0u32)).unwrap(); assert!(scorer.is::()); @@ -78,7 +78,7 @@ mod tests { pub fn test_boolean_termonly_intersection() { let (index, text_field) = aux_test_helper(); let query_parser = QueryParser::for_index(&index, vec![text_field]); - let searcher = index.searcher(); + let searcher = index.reader().searcher(); { let query = query_parser.parse_query("+a +b +c").unwrap(); let weight = query.weight(&searcher, true).unwrap(); @@ -97,7 +97,7 @@ mod tests { pub fn test_boolean_reqopt() { let (index, text_field) = aux_test_helper(); let query_parser = QueryParser::for_index(&index, vec![text_field]); - let searcher = index.searcher(); + let searcher = index.reader().searcher(); { let query = query_parser.parse_query("+a b").unwrap(); let weight = query.weight(&searcher, true).unwrap(); @@ -126,10 +126,13 @@ mod tests { query }; + let reader = index.reader(); + let matching_docs = |boolean_query: &Query| { - let searcher = index.searcher(); - let test_docs = searcher.search(boolean_query, &TestCollector).unwrap(); - test_docs + reader + .searcher() + .search(boolean_query, &TestCollector) + .unwrap() .docs() .iter() .cloned() @@ -185,10 +188,12 @@ mod tests { let query: Box = Box::new(term_query); query }; - + let reader = index.reader(); let score_docs = |boolean_query: &Query| { - let searcher = index.searcher(); - let fruit = searcher.search(boolean_query, &TestCollector).unwrap(); + let fruit = reader + .searcher() + .search(boolean_query, &TestCollector) + .unwrap(); fruit.scores().to_vec() }; diff --git a/src/query/fuzzy_query.rs b/src/query/fuzzy_query.rs index 6539929bf..a1c06a593 100644 --- a/src/query/fuzzy_query.rs +++ b/src/query/fuzzy_query.rs @@ -141,8 +141,8 @@ mod test { )); index_writer.commit().unwrap(); } - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let reader = index.reader(); + let searcher = reader.searcher(); { let term = Term::from_field_text(country_field, "japon"); diff --git a/src/query/phrase_query/mod.rs b/src/query/phrase_query/mod.rs index 90ae26451..198beed43 100644 --- a/src/query/phrase_query/mod.rs +++ b/src/query/phrase_query/mod.rs @@ -31,7 +31,6 @@ mod tests { } assert!(index_writer.commit().is_ok()); } - index.load_searchers().unwrap(); index } @@ -46,8 +45,7 @@ mod tests { ]); let schema = index.schema(); let text_field = schema.get_field("text").unwrap(); - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let test_query = |texts: Vec<&str>| { let terms: Vec = texts .iter() @@ -90,8 +88,7 @@ mod tests { index_writer.add_document(doc!(text_field=>"a b c")); assert!(index_writer.commit().is_ok()); } - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let phrase_query = PhraseQuery::new(vec![ Term::from_field_text(text_field, "a"), Term::from_field_text(text_field, "b"), @@ -115,8 +112,7 @@ mod tests { let index = create_index(&["a b c", "a b c a b"]); let schema = index.schema(); let text_field = schema.get_field("text").unwrap(); - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let test_query = |texts: Vec<&str>| { let terms: Vec = texts .iter() @@ -148,8 +144,7 @@ mod tests { assert!(index_writer.commit().is_ok()); } - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let test_query = |texts: Vec<&str>| { let terms: Vec = texts .iter() @@ -177,8 +172,7 @@ mod tests { index_writer.add_document(doc!(text_field=>"a b c d e f g h")); assert!(index_writer.commit().is_ok()); } - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let test_query = |texts: Vec<(usize, &str)>| { let terms: Vec<(usize, Term)> = texts .iter() diff --git a/src/query/range_query.rs b/src/query/range_query.rs index bf5b37967..84c519b75 100644 --- a/src/query/range_query.rs +++ b/src/query/range_query.rs @@ -316,8 +316,8 @@ mod tests { } index_writer.commit().unwrap(); } - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let reader = index.reader(); + let searcher = reader.searcher(); let docs_in_the_sixties = RangeQuery::new_u64(year_field, 1960u64..1970u64); @@ -355,8 +355,8 @@ mod tests { index_writer.commit().unwrap(); } - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let reader = index.reader(); + let searcher = reader.searcher(); let count_multiples = |range_query: RangeQuery| searcher.search(&range_query, &Count).unwrap(); diff --git a/src/query/regex_query.rs b/src/query/regex_query.rs index caa8f080a..28f3f4082 100644 --- a/src/query/regex_query.rs +++ b/src/query/regex_query.rs @@ -108,8 +108,8 @@ mod test { )); index_writer.commit().unwrap(); } - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let reader = index.reader(); + let searcher = reader.searcher(); { let regex_query = RegexQuery::new("jap[ao]n".to_string(), country_field); let scored_docs = searcher diff --git a/src/query/term_query/mod.rs b/src/query/term_query/mod.rs index edc4af411..7b4c845a6 100644 --- a/src/query/term_query/mod.rs +++ b/src/query/term_query/mod.rs @@ -32,9 +32,7 @@ mod tests { } assert!(index_writer.commit().is_ok()); } - - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let term_query = TermQuery::new( Term::from_field_text(text_field, "a"), IndexRecordOption::Basic, @@ -65,8 +63,7 @@ mod tests { index_writer.add_document(doc!(left_field => "left4 left1")); index_writer.commit().unwrap(); } - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let searcher = index.reader().searcher(); { let term = Term::from_field_text(left_field, "left2"); let term_query = TermQuery::new(term, IndexRecordOption::WithFreqs); diff --git a/src/reader/mod.rs b/src/reader/mod.rs index d1ad22b41..f70042749 100644 --- a/src/reader/mod.rs +++ b/src/reader/mod.rs @@ -32,11 +32,25 @@ impl IndexReaderBuilder { index, } } + + pub fn reload_policy(mut self, reload_policy: ReloadPolicy) -> IndexReaderBuilder { + self.reload_policy = reload_policy; + self + } + + pub fn num_searchers(mut self, num_searchers: usize) -> IndexReaderBuilder { + self.num_searchers = num_searchers; + self + } } impl Into for IndexReaderBuilder { fn into(self) -> IndexReader { - IndexReader::new(self.index, self.num_searchers, self.reload_policy) + let reader = IndexReader::new(self.index, self.num_searchers, self.reload_policy); + if let Err(err) = reader.load_searchers() { + error!("Failed to load searchers."); + } + reader } } diff --git a/src/snippet/mod.rs b/src/snippet/mod.rs index 8a3895acb..99bd8d4e0 100644 --- a/src/snippet/mod.rs +++ b/src/snippet/mod.rs @@ -528,9 +528,8 @@ Survey in 2016, 2017, and 2018."#; index_writer.add_document(doc!(text_field => "a")); index_writer.add_document(doc!(text_field => "a b")); index_writer.commit().unwrap(); - index.load_searchers().unwrap(); } - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let query_parser = QueryParser::for_index(&index, vec![text_field]); { let query = query_parser.parse_query("e").unwrap(); @@ -587,8 +586,7 @@ Survey in 2016, 2017, and 2018."#; } index_writer.commit().unwrap(); } - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let query_parser = QueryParser::for_index(&index, vec![text_field]); let query = query_parser.parse_query("rust design").unwrap(); let mut snippet_generator = diff --git a/src/space_usage/mod.rs b/src/space_usage/mod.rs index 9ca77637f..1a0ccee9e 100644 --- a/src/space_usage/mod.rs +++ b/src/space_usage/mod.rs @@ -305,9 +305,8 @@ mod test { fn test_empty() { let schema = Schema::builder().build(); let index = Index::create_in_ram(schema.clone()); - - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let reader = index.reader(); + let searcher = reader.searcher(); let searcher_space_usage = searcher.space_usage(); assert_eq!(0, searcher_space_usage.total()); } @@ -345,8 +344,8 @@ mod test { index_writer.commit().unwrap(); } - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let reader = index.reader(); + let searcher = reader.searcher(); let searcher_space_usage = searcher.space_usage(); assert!(searcher_space_usage.total() > 0); assert_eq!(1, searcher_space_usage.segments().len()); @@ -385,8 +384,8 @@ mod test { index_writer.commit().unwrap(); } - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let reader = index.reader(); + let searcher = reader.searcher(); let searcher_space_usage = searcher.space_usage(); assert!(searcher_space_usage.total() > 0); assert_eq!(1, searcher_space_usage.segments().len()); @@ -424,9 +423,8 @@ mod test { index_writer.add_document(doc!(name => "hello hi goodbye")); index_writer.commit().unwrap(); } - - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let reader = index.reader(); + let searcher = reader.searcher(); let searcher_space_usage = searcher.space_usage(); assert!(searcher_space_usage.total() > 0); assert_eq!(1, searcher_space_usage.segments().len()); @@ -472,9 +470,8 @@ mod test { index_writer2.commit().unwrap(); } - index.load_searchers().unwrap(); - - let searcher = index.searcher(); + let reader = index.reader(); + let searcher = reader.searcher(); let searcher_space_usage = searcher.space_usage(); assert!(searcher_space_usage.total() > 0); assert_eq!(1, searcher_space_usage.segments().len()); diff --git a/src/termdict/mod.rs b/src/termdict/mod.rs index f3157118c..d6c8b35f7 100644 --- a/src/termdict/mod.rs +++ b/src/termdict/mod.rs @@ -159,8 +159,7 @@ mod tests { index_writer.commit().unwrap(); } } - index.load_searchers().unwrap(); - let searcher = index.searcher(); + let searcher = index.reader().searcher(); let field_searcher = searcher.field(text_field); let mut term_it = field_searcher.terms();