pub struct ReservoirSampling { /* private fields */ }Expand description
ReservoirSampling collector collects k random documents using O(k) memory
use summa_core::collectors::ReservoirSampling;
use summa_core::configs::core::QueryParserConfig;
use summa_core::components::{MorphologyManager, QueryParser};
use tantivy::collector::Count;
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(15_000_000).unwrap();
index_writer.add_document(doc!(title => "The Name of the Wind")).unwrap();
index_writer.add_document(doc!(title => "The Diary of Muadib")).unwrap();
index_writer.add_document(doc!(title => "A Dairy Cow")).unwrap();
index_writer.add_document(doc!(title => "The Diary of a Young Girl")).unwrap();
assert!(index_writer.commit().is_ok());
let reader = index.reader().unwrap();
let searcher = reader.searcher();
// Here comes the important part
let query_parser = QueryParser::for_index(&index, QueryParserConfig::from_default_fields(vec!["title".to_string()]), &MorphologyManager::default()).unwrap();
let query = query_parser.parse_query("diary").unwrap();
let documents = searcher.search(&query, &ReservoirSampling::with_limit(2)).unwrap();
assert_eq!(documents.len(), 2);Implementations§
Source§impl ReservoirSampling
Implements Algorithm R
for weighted sampling from the downstream Fruit. It uses O(k) memory and has O(n) time complexity.
impl ReservoirSampling
Implements Algorithm R
for weighted sampling from the downstream Fruit. It uses O(k) memory and has O(n) time complexity.
pub fn with_limit(limit: usize) -> ReservoirSampling
Trait Implementations§
Source§impl Collector for ReservoirSampling
impl Collector for ReservoirSampling
Source§type Fruit = Vec<DocAddress>
type Fruit = Vec<DocAddress>
Fruit is the type for the result of our collection.
e.g. usize for the Count collector.Source§type Child = SegmentReservoirSamplingCollector
type Child = SegmentReservoirSamplingCollector
Type of the
SegmentCollector associated with this collector.Source§fn for_segment(
&self,
segment_ord: SegmentOrdinal,
_: &SegmentReader,
) -> Result<SegmentReservoirSamplingCollector>
fn for_segment( &self, segment_ord: SegmentOrdinal, _: &SegmentReader, ) -> Result<SegmentReservoirSamplingCollector>
set_segment is called before beginning to enumerate
on this segment.Source§fn requires_scoring(&self) -> bool
fn requires_scoring(&self) -> bool
Returns true iff the collector requires to compute scores for documents.
Source§fn merge_fruits(
&self,
segment_docs_vec: Vec<(Vec<DocAddress>, usize)>,
) -> Result<Vec<DocAddress>>
fn merge_fruits( &self, segment_docs_vec: Vec<(Vec<DocAddress>, usize)>, ) -> Result<Vec<DocAddress>>
Combines the fruit associated with the collection of each segments
into one fruit.
fn for_segment_async<'life0, 'life1, 'async_trait>(
&'life0 self,
segment_local_id: u32,
segment: &'life1 SegmentReader,
) -> Pin<Box<dyn Future<Output = Result<Self::Child, TantivyError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
Source§fn collect_segment(
&self,
weight: &(dyn Weight + 'static),
segment_ord: u32,
reader: &SegmentReader,
) -> Result<<Self::Child as SegmentCollector>::Fruit, TantivyError>
fn collect_segment( &self, weight: &(dyn Weight + 'static), segment_ord: u32, reader: &SegmentReader, ) -> Result<<Self::Child as SegmentCollector>::Fruit, TantivyError>
Created a segment collector and
Source§fn collect_segment_async<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
weight: &'life1 (dyn Weight + 'static),
segment_ord: u32,
reader: &'life2 SegmentReader,
) -> Pin<Box<dyn Future<Output = Result<<Self::Child as SegmentCollector>::Fruit, TantivyError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: 'async_trait,
fn collect_segment_async<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
weight: &'life1 (dyn Weight + 'static),
segment_ord: u32,
reader: &'life2 SegmentReader,
) -> Pin<Box<dyn Future<Output = Result<<Self::Child as SegmentCollector>::Fruit, TantivyError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: 'async_trait,
Created a segment collector in async way
Auto Trait Implementations§
impl Freeze for ReservoirSampling
impl RefUnwindSafe for ReservoirSampling
impl Send for ReservoirSampling
impl Sync for ReservoirSampling
impl Unpin for ReservoirSampling
impl UnwindSafe for ReservoirSampling
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Converts
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Converts
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Converts
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Converts
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more