Struct tantivy::collector::MultiCollector [−][src]
pub struct MultiCollector<'a> { /* fields omitted */ }
Expand description
Multicollector makes it possible to collect on more than one collector. It should only be used for use cases where the Collector types is unknown at compile time.
If the type of the collectors is known, you can just group yours collectors in a tuple. See the Combining several collectors section of the collector documentation.
use tantivy::collector::{Count, TopDocs, MultiCollector};
use tantivy::query::QueryParser;
use tantivy::schema::{Schema, TEXT};
use tantivy::{doc, Index};
let mut schema_builder = Schema::builder();
let title = schema_builder.add_text_field("title", TEXT);
let schema = schema_builder.build();
let index = Index::create_in_ram(schema);
let mut index_writer = index.writer(3_000_000).unwrap();
index_writer.add_document(doc!(title => "The Name of the Wind"));
index_writer.add_document(doc!(title => "The Diary of Muadib"));
index_writer.add_document(doc!(title => "A Dairy Cow"));
index_writer.add_document(doc!(title => "The Diary of a Young Girl"));
assert!(index_writer.commit().is_ok());
let reader = index.reader().unwrap();
let searcher = reader.searcher();
let mut collectors = MultiCollector::new();
let top_docs_handle = collectors.add_collector(TopDocs::with_limit(2));
let count_handle = collectors.add_collector(Count);
let query_parser = QueryParser::for_index(&index, vec![title]);
let query = query_parser.parse_query("diary").unwrap();
let mut multi_fruit = searcher.search(&query, &collectors).unwrap();
let count = count_handle.extract(&mut multi_fruit);
let top_docs = top_docs_handle.extract(&mut multi_fruit);
assert_eq!(count, 2);
assert_eq!(top_docs.len(), 2);
Implementations
Trait Implementations
type Fruit = MultiFruit
type Fruit = MultiFruit
Fruit
is the type for the result of our collection.
e.g. usize
for the Count
collector. Read more
type Child = MultiCollectorChild
type Child = MultiCollectorChild
Type of the SegmentCollector
associated to this collector.
fn for_segment(
&self,
segment_local_id: SegmentOrdinal,
segment: &SegmentReader
) -> Result<MultiCollectorChild>
fn for_segment(
&self,
segment_local_id: SegmentOrdinal,
segment: &SegmentReader
) -> Result<MultiCollectorChild>
set_segment
is called before beginning to enumerate
on this segment. Read more
Returns true iff the collector requires to compute scores for documents.
Combines the fruit associated to the collection of each segments into one fruit. Read more
fn collect_segment(
&self,
weight: &dyn Weight,
segment_ord: u32,
reader: &SegmentReader
) -> Result<<Self::Child as SegmentCollector>::Fruit>
fn collect_segment(
&self,
weight: &dyn Weight,
segment_ord: u32,
reader: &SegmentReader
) -> Result<<Self::Child as SegmentCollector>::Fruit>
Created a segment collector and
Returns the “default value” for a type. Read more
Auto Trait Implementations
impl<'a> !RefUnwindSafe for MultiCollector<'a>
impl<'a> Send for MultiCollector<'a>
impl<'a> Sync for MultiCollector<'a>
impl<'a> Unpin for MultiCollector<'a>
impl<'a> !UnwindSafe for MultiCollector<'a>
Blanket Implementations
Mutably borrows from an owned value. Read more
Convert Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
. Read more
Convert Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
. Read more
Convert &Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s. Read more
Convert &mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s. Read more