mirror of
https://github.com/quickwit-oss/tantivy.git
synced 2026-01-07 09:32:54 +00:00
Removed the SegmentCollector type from the Generics of the
FilterCollector
This commit is contained in:
@@ -9,8 +9,6 @@
|
||||
|
||||
// ---
|
||||
// Importing tantivy...
|
||||
use std::marker::PhantomData;
|
||||
|
||||
use crate::collector::{Collector, SegmentCollector};
|
||||
use crate::fastfield::FastFieldReader;
|
||||
use crate::schema::Field;
|
||||
@@ -55,48 +53,44 @@ use crate::{Score, SegmentReader, TantivyError};
|
||||
///
|
||||
/// assert_eq!(filtered_top_docs.len(), 0);
|
||||
/// ```
|
||||
pub struct FilterCollector<TCollector, TSegmentCollector> {
|
||||
pub struct FilterCollector<TCollector> {
|
||||
field: Field,
|
||||
collector: TCollector,
|
||||
predicate: &'static (dyn Fn(u64) -> bool + Send + Sync),
|
||||
phantom: PhantomData<TSegmentCollector>,
|
||||
}
|
||||
|
||||
impl<TCollector, TSegmentCollector> FilterCollector<TCollector, TSegmentCollector>
|
||||
impl<TCollector> FilterCollector<TCollector>
|
||||
where
|
||||
TCollector: Collector<Child = TSegmentCollector> + Send + Sync,
|
||||
TSegmentCollector: SegmentCollector + Send + Sync,
|
||||
TCollector: Collector + Send + Sync,
|
||||
{
|
||||
pub fn new(
|
||||
field: Field,
|
||||
predicate: &'static (dyn Fn(u64) -> bool + Send + Sync),
|
||||
collector: TCollector,
|
||||
) -> FilterCollector<TCollector, TSegmentCollector> {
|
||||
) -> FilterCollector<TCollector> {
|
||||
FilterCollector {
|
||||
field,
|
||||
predicate,
|
||||
collector,
|
||||
phantom: PhantomData,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<TCollector, TSegmentCollector> Collector for FilterCollector<TCollector, TSegmentCollector>
|
||||
impl<TCollector> Collector for FilterCollector<TCollector>
|
||||
where
|
||||
TSegmentCollector: SegmentCollector + Send + Sync,
|
||||
TCollector: Collector<Child = TSegmentCollector> + Send + Sync,
|
||||
TCollector: Collector + Send + Sync,
|
||||
{
|
||||
// That's the type of our result.
|
||||
// Our standard deviation will be a float.
|
||||
type Fruit = TCollector::Fruit;
|
||||
|
||||
type Child = FilterSegmentCollector<TSegmentCollector>;
|
||||
type Child = FilterSegmentCollector<TCollector::Child>;
|
||||
|
||||
fn for_segment(
|
||||
&self,
|
||||
segment_local_id: u32,
|
||||
segment_reader: &SegmentReader,
|
||||
) -> crate::Result<FilterSegmentCollector<TSegmentCollector>> {
|
||||
) -> crate::Result<FilterSegmentCollector<TCollector::Child>> {
|
||||
let fast_field_reader = segment_reader
|
||||
.fast_fields()
|
||||
.u64(self.field)
|
||||
@@ -110,7 +104,7 @@ where
|
||||
let segment_collector = self
|
||||
.collector
|
||||
.for_segment(segment_local_id, segment_reader)?;
|
||||
Ok(FilterSegmentCollector::<TSegmentCollector> {
|
||||
Ok(FilterSegmentCollector {
|
||||
fast_field_reader,
|
||||
segment_collector: segment_collector,
|
||||
predicate: self.predicate,
|
||||
@@ -137,7 +131,7 @@ pub struct FilterSegmentCollector<TSegmentCollector> {
|
||||
|
||||
impl<TSegmentCollector> SegmentCollector for FilterSegmentCollector<TSegmentCollector>
|
||||
where
|
||||
TSegmentCollector: SegmentCollector + Send + Sync,
|
||||
TSegmentCollector: SegmentCollector,
|
||||
{
|
||||
type Fruit = TSegmentCollector::Fruit;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user