mirror of
https://github.com/quickwit-oss/tantivy.git
synced 2026-01-01 06:52:54 +00:00
Compare commits
1 Commits
python-bin
...
segment_fr
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2267722d01 |
@@ -70,6 +70,8 @@ impl Collector for StatsCollector {
|
|||||||
// Our standard deviation will be a float.
|
// Our standard deviation will be a float.
|
||||||
type Fruit = Option<Stats>;
|
type Fruit = Option<Stats>;
|
||||||
|
|
||||||
|
type SegmentFruit = Self::Fruit;
|
||||||
|
|
||||||
type Child = StatsSegmentCollector;
|
type Child = StatsSegmentCollector;
|
||||||
|
|
||||||
fn for_segment(
|
fn for_segment(
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ pub struct Count;
|
|||||||
|
|
||||||
impl Collector for Count {
|
impl Collector for Count {
|
||||||
type Fruit = usize;
|
type Fruit = usize;
|
||||||
|
type SegmentFruit = usize;
|
||||||
|
|
||||||
type Child = SegmentCountCollector;
|
type Child = SegmentCountCollector;
|
||||||
|
|
||||||
|
|||||||
@@ -258,6 +258,8 @@ impl FacetCollector {
|
|||||||
impl Collector for FacetCollector {
|
impl Collector for FacetCollector {
|
||||||
type Fruit = FacetCounts;
|
type Fruit = FacetCounts;
|
||||||
|
|
||||||
|
type SegmentFruit = FacetCounts;
|
||||||
|
|
||||||
type Child = FacetSegmentCollector;
|
type Child = FacetSegmentCollector;
|
||||||
|
|
||||||
fn for_segment(
|
fn for_segment(
|
||||||
|
|||||||
@@ -136,8 +136,10 @@ pub trait Collector: Sync {
|
|||||||
/// e.g. `usize` for the `Count` collector.
|
/// e.g. `usize` for the `Count` collector.
|
||||||
type Fruit: Fruit;
|
type Fruit: Fruit;
|
||||||
|
|
||||||
|
type SegmentFruit: Fruit;
|
||||||
|
|
||||||
/// Type of the `SegmentCollector` associated to this collector.
|
/// Type of the `SegmentCollector` associated to this collector.
|
||||||
type Child: SegmentCollector<Fruit = Self::Fruit>;
|
type Child: SegmentCollector<Fruit = Self::SegmentFruit>;
|
||||||
|
|
||||||
/// `set_segment` is called before beginning to enumerate
|
/// `set_segment` is called before beginning to enumerate
|
||||||
/// on this segment.
|
/// on this segment.
|
||||||
@@ -152,7 +154,7 @@ pub trait Collector: Sync {
|
|||||||
|
|
||||||
/// Combines the fruit associated to the collection of each segments
|
/// Combines the fruit associated to the collection of each segments
|
||||||
/// into one fruit.
|
/// into one fruit.
|
||||||
fn merge_fruits(&self, segment_fruits: Vec<Self::Fruit>) -> Result<Self::Fruit>;
|
fn merge_fruits(&self, segment_fruits: Vec<Self::SegmentFruit>) -> Result<Self::Fruit>;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The `SegmentCollector` is the trait in charge of defining the
|
/// The `SegmentCollector` is the trait in charge of defining the
|
||||||
@@ -181,6 +183,9 @@ where
|
|||||||
Right: Collector,
|
Right: Collector,
|
||||||
{
|
{
|
||||||
type Fruit = (Left::Fruit, Right::Fruit);
|
type Fruit = (Left::Fruit, Right::Fruit);
|
||||||
|
|
||||||
|
type SegmentFruit = (Left::SegmentFruit, Right::SegmentFruit);
|
||||||
|
|
||||||
type Child = (Left::Child, Right::Child);
|
type Child = (Left::Child, Right::Child);
|
||||||
|
|
||||||
fn for_segment(&self, segment_local_id: u32, segment: &SegmentReader) -> Result<Self::Child> {
|
fn for_segment(&self, segment_local_id: u32, segment: &SegmentReader) -> Result<Self::Child> {
|
||||||
@@ -195,7 +200,7 @@ where
|
|||||||
|
|
||||||
fn merge_fruits(
|
fn merge_fruits(
|
||||||
&self,
|
&self,
|
||||||
children: Vec<(Left::Fruit, Right::Fruit)>,
|
children: Vec<(Left::SegmentFruit, Right::SegmentFruit)>,
|
||||||
) -> Result<(Left::Fruit, Right::Fruit)> {
|
) -> Result<(Left::Fruit, Right::Fruit)> {
|
||||||
let mut left_fruits = vec![];
|
let mut left_fruits = vec![];
|
||||||
let mut right_fruits = vec![];
|
let mut right_fruits = vec![];
|
||||||
@@ -236,6 +241,7 @@ where
|
|||||||
Three: Collector,
|
Three: Collector,
|
||||||
{
|
{
|
||||||
type Fruit = (One::Fruit, Two::Fruit, Three::Fruit);
|
type Fruit = (One::Fruit, Two::Fruit, Three::Fruit);
|
||||||
|
type SegmentFruit = (One::SegmentFruit, Two::SegmentFruit, Three::SegmentFruit);
|
||||||
type Child = (One::Child, Two::Child, Three::Child);
|
type Child = (One::Child, Two::Child, Three::Child);
|
||||||
|
|
||||||
fn for_segment(&self, segment_local_id: u32, segment: &SegmentReader) -> Result<Self::Child> {
|
fn for_segment(&self, segment_local_id: u32, segment: &SegmentReader) -> Result<Self::Child> {
|
||||||
@@ -249,7 +255,7 @@ where
|
|||||||
self.0.requires_scoring() || self.1.requires_scoring() || self.2.requires_scoring()
|
self.0.requires_scoring() || self.1.requires_scoring() || self.2.requires_scoring()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn merge_fruits(&self, children: Vec<Self::Fruit>) -> Result<Self::Fruit> {
|
fn merge_fruits(&self, children: Vec<Self::SegmentFruit>) -> Result<Self::Fruit> {
|
||||||
let mut one_fruits = vec![];
|
let mut one_fruits = vec![];
|
||||||
let mut two_fruits = vec![];
|
let mut two_fruits = vec![];
|
||||||
let mut three_fruits = vec![];
|
let mut three_fruits = vec![];
|
||||||
@@ -295,6 +301,7 @@ where
|
|||||||
Four: Collector,
|
Four: Collector,
|
||||||
{
|
{
|
||||||
type Fruit = (One::Fruit, Two::Fruit, Three::Fruit, Four::Fruit);
|
type Fruit = (One::Fruit, Two::Fruit, Three::Fruit, Four::Fruit);
|
||||||
|
type SegmentFruit = (One::SegmentFruit, Two::SegmentFruit, Three::SegmentFruit, Four::SegmentFruit);
|
||||||
type Child = (One::Child, Two::Child, Three::Child, Four::Child);
|
type Child = (One::Child, Two::Child, Three::Child, Four::Child);
|
||||||
|
|
||||||
fn for_segment(&self, segment_local_id: u32, segment: &SegmentReader) -> Result<Self::Child> {
|
fn for_segment(&self, segment_local_id: u32, segment: &SegmentReader) -> Result<Self::Child> {
|
||||||
@@ -312,7 +319,7 @@ where
|
|||||||
|| self.3.requires_scoring()
|
|| self.3.requires_scoring()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn merge_fruits(&self, children: Vec<Self::Fruit>) -> Result<Self::Fruit> {
|
fn merge_fruits(&self, children: Vec<Self::SegmentFruit>) -> Result<Self::Fruit> {
|
||||||
let mut one_fruits = vec![];
|
let mut one_fruits = vec![];
|
||||||
let mut two_fruits = vec![];
|
let mut two_fruits = vec![];
|
||||||
let mut three_fruits = vec![];
|
let mut three_fruits = vec![];
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ pub struct CollectorWrapper<TCollector: Collector>(TCollector);
|
|||||||
|
|
||||||
impl<TCollector: Collector> Collector for CollectorWrapper<TCollector> {
|
impl<TCollector: Collector> Collector for CollectorWrapper<TCollector> {
|
||||||
type Fruit = Box<Fruit>;
|
type Fruit = Box<Fruit>;
|
||||||
|
type SegmentFruit = Box<Fruit>;
|
||||||
type Child = Box<BoxableSegmentCollector>;
|
type Child = Box<BoxableSegmentCollector>;
|
||||||
|
|
||||||
fn for_segment(
|
fn for_segment(
|
||||||
@@ -34,10 +35,10 @@ impl<TCollector: Collector> Collector for CollectorWrapper<TCollector> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn merge_fruits(&self, children: Vec<<Self as Collector>::Fruit>) -> Result<Box<Fruit>> {
|
fn merge_fruits(&self, children: Vec<<Self as Collector>::Fruit>) -> Result<Box<Fruit>> {
|
||||||
let typed_fruit: Vec<TCollector::Fruit> = children
|
let typed_fruit: Vec<TCollector::SegmentFruit> = children
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|untyped_fruit| {
|
.map(|untyped_fruit| {
|
||||||
Downcast::<TCollector::Fruit>::downcast(untyped_fruit)
|
Downcast::<TCollector::SegmentFruit>::downcast(untyped_fruit)
|
||||||
.map(|boxed_but_typed| *boxed_but_typed)
|
.map(|boxed_but_typed| *boxed_but_typed)
|
||||||
.map_err(|e| {
|
.map_err(|e| {
|
||||||
let err_msg = format!("Failed to cast child collector fruit. {:?}", e);
|
let err_msg = format!("Failed to cast child collector fruit. {:?}", e);
|
||||||
@@ -152,7 +153,7 @@ impl<TFruit: Fruit> FruitHandle<TFruit> {
|
|||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct MultiCollector<'a> {
|
pub struct MultiCollector<'a> {
|
||||||
collector_wrappers:
|
collector_wrappers:
|
||||||
Vec<Box<Collector<Child = Box<BoxableSegmentCollector>, Fruit = Box<Fruit>> + 'a>>,
|
Vec<Box<Collector<Child = Box<BoxableSegmentCollector>, Fruit = Box<Fruit>, SegmentFruit = Box<Fruit>> + 'a>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> MultiCollector<'a> {
|
impl<'a> MultiCollector<'a> {
|
||||||
@@ -177,7 +178,9 @@ impl<'a> MultiCollector<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> Collector for MultiCollector<'a> {
|
impl<'a> Collector for MultiCollector<'a> {
|
||||||
|
|
||||||
type Fruit = MultiFruit;
|
type Fruit = MultiFruit;
|
||||||
|
type SegmentFruit = MultiFruit;
|
||||||
type Child = MultiCollectorChild;
|
type Child = MultiCollectorChild;
|
||||||
|
|
||||||
fn for_segment(
|
fn for_segment(
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ impl TestFruit {
|
|||||||
|
|
||||||
impl Collector for TestCollector {
|
impl Collector for TestCollector {
|
||||||
type Fruit = TestFruit;
|
type Fruit = TestFruit;
|
||||||
|
type SegmentFruit = Self::Fruit;
|
||||||
type Child = TestSegmentCollector;
|
type Child = TestSegmentCollector;
|
||||||
|
|
||||||
fn for_segment(
|
fn for_segment(
|
||||||
@@ -109,6 +110,8 @@ impl FastFieldTestCollector {
|
|||||||
|
|
||||||
impl Collector for FastFieldTestCollector {
|
impl Collector for FastFieldTestCollector {
|
||||||
type Fruit = Vec<u64>;
|
type Fruit = Vec<u64>;
|
||||||
|
type SegmentFruit = Self::Fruit;
|
||||||
|
|
||||||
type Child = FastFieldSegmentCollector;
|
type Child = FastFieldSegmentCollector;
|
||||||
|
|
||||||
fn for_segment(
|
fn for_segment(
|
||||||
@@ -165,6 +168,7 @@ impl BytesFastFieldTestCollector {
|
|||||||
|
|
||||||
impl Collector for BytesFastFieldTestCollector {
|
impl Collector for BytesFastFieldTestCollector {
|
||||||
type Fruit = Vec<u8>;
|
type Fruit = Vec<u8>;
|
||||||
|
type SegmentFruit = Self::Fruit;
|
||||||
type Child = BytesFastFieldSegmentCollector;
|
type Child = BytesFastFieldSegmentCollector;
|
||||||
|
|
||||||
fn for_segment(
|
fn for_segment(
|
||||||
|
|||||||
@@ -88,6 +88,7 @@ impl<T: FastValue + PartialOrd + Clone> TopDocsByField<T> {
|
|||||||
|
|
||||||
impl<T: FastValue + PartialOrd + Send + Sync + 'static> Collector for TopDocsByField<T> {
|
impl<T: FastValue + PartialOrd + Send + Sync + 'static> Collector for TopDocsByField<T> {
|
||||||
type Fruit = Vec<(T, DocAddress)>;
|
type Fruit = Vec<(T, DocAddress)>;
|
||||||
|
type SegmentFruit = Vec<(T, DocAddress)>;
|
||||||
|
|
||||||
type Child = TopFieldSegmentCollector<T>;
|
type Child = TopFieldSegmentCollector<T>;
|
||||||
|
|
||||||
|
|||||||
@@ -89,6 +89,7 @@ impl TopDocs {
|
|||||||
|
|
||||||
impl Collector for TopDocs {
|
impl Collector for TopDocs {
|
||||||
type Fruit = Vec<(Score, DocAddress)>;
|
type Fruit = Vec<(Score, DocAddress)>;
|
||||||
|
type SegmentFruit = Vec<(Score, DocAddress)>;
|
||||||
|
|
||||||
type Child = TopScoreSegmentCollector;
|
type Child = TopScoreSegmentCollector;
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ fn collect_segment<C: Collector>(
|
|||||||
weight: &Weight,
|
weight: &Weight,
|
||||||
segment_ord: u32,
|
segment_ord: u32,
|
||||||
segment_reader: &SegmentReader,
|
segment_reader: &SegmentReader,
|
||||||
) -> Result<C::Fruit> {
|
) -> Result<C::SegmentFruit> {
|
||||||
let mut scorer = weight.scorer(segment_reader)?;
|
let mut scorer = weight.scorer(segment_reader)?;
|
||||||
let mut segment_collector = collector.for_segment(segment_ord as u32, segment_reader)?;
|
let mut segment_collector = collector.for_segment(segment_ord as u32, segment_reader)?;
|
||||||
if let Some(delete_bitset) = segment_reader.delete_bitset() {
|
if let Some(delete_bitset) = segment_reader.delete_bitset() {
|
||||||
|
|||||||
Reference in New Issue
Block a user