Better names for ConditionalTopCollector traits
- Id
- a1d530ca3312d66b9453deadf64d11795c25b27e
- Author
- Caio
- Commit time
- 2020-01-02T07:29:49+01:00
Modified tique/src/top_collector/conditional_collector.rs
use super::{Scored, TopK};
-pub trait CollectConditionFactory<T>: Clone {
- type Type: CollectCondition<T>;
+pub trait ConditionForSegment<T>: Clone {
+ type Type: CheckCondition<T>;
fn for_segment(&self, reader: &SegmentReader) -> Self::Type;
}
-impl<T, C, F> CollectConditionFactory<T> for F
+impl<T, C, F> ConditionForSegment<T> for F
where
F: Clone + Fn(&SegmentReader) -> C,
- C: CollectCondition<T>,
+ C: CheckCondition<T>,
{
type Type = C;
fn for_segment(&self, reader: &SegmentReader) -> Self::Type {
}
}
-impl<T> CollectConditionFactory<T> for bool {
+impl<T> ConditionForSegment<T> for bool {
type Type = bool;
fn for_segment(&self, _reader: &SegmentReader) -> Self::Type {
*self
}
}
-pub trait CollectCondition<T>: 'static + Clone {
+pub trait CheckCondition<T>: 'static + Clone {
fn check(&self, segment_id: SegmentLocalId, doc_id: DocId, score: T) -> bool;
}
-impl<T> CollectCondition<T> for bool {
+impl<T> CheckCondition<T> for bool {
fn check(&self, _: SegmentLocalId, _: DocId, _: T) -> bool {
*self
}
}
-impl<F, T> CollectCondition<T> for F
+impl<F, T> CheckCondition<T> for F
where
F: 'static + Clone + Fn(SegmentLocalId, DocId, T) -> bool,
{
pub type SearchMarker<T> = Scored<T, DocAddress>;
-impl<T> CollectCondition<T> for SearchMarker<T>
+impl<T> CheckCondition<T> for SearchMarker<T>
where
T: 'static + PartialOrd + Clone,
{
pub struct ConditionalTopCollector<T, F>
where
- F: CollectConditionFactory<T>,
+ F: ConditionForSegment<T>,
{
pub limit: usize,
condition_factory: F,
impl<T, F> ConditionalTopCollector<T, F>
where
T: PartialOrd,
- F: CollectConditionFactory<T>,
+ F: ConditionForSegment<T>,
{
pub fn with_limit(limit: usize, condition_factory: F) -> Self {
if limit < 1 {
impl<F> Collector for ConditionalTopCollector<Score, F>
where
- F: CollectConditionFactory<Score> + Sync,
+ F: ConditionForSegment<Score> + Sync,
{
type Fruit = CollectionResult<Score>;
type Child = ConditionalTopSegmentCollector<Score, F::Type>;
pub struct ConditionalTopSegmentCollector<T, F>
where
- F: CollectCondition<T>,
+ F: CheckCondition<T>,
{
segment_id: SegmentLocalId,
collected: TopK<T, DocId>,
impl<T, F> ConditionalTopSegmentCollector<T, F>
where
T: PartialOrd + Copy,
- F: CollectCondition<T>,
+ F: CheckCondition<T>,
{
pub fn new(segment_id: SegmentLocalId, limit: usize, condition: F) -> Self {
ConditionalTopSegmentCollector {
impl<F> SegmentCollector for ConditionalTopSegmentCollector<Score, F>
where
- F: CollectCondition<Score>,
+ F: CheckCondition<Score>,
{
type Fruit = CollectionResult<Score>;
Modified tique/src/top_collector/custom_score.rs
use tantivy::{
collector::{Collector, SegmentCollector},
DocId, Result, Score, SegmentLocalId, SegmentReader,
};
use super::{
- CollectCondition, CollectConditionFactory, CollectionResult, ConditionalTopCollector,
+ CheckCondition, CollectionResult, ConditionForSegment, ConditionalTopCollector,
ConditionalTopSegmentCollector,
};
pub struct CustomScoreTopCollector<T, C, F>
where
- C: CollectConditionFactory<T>,
+ C: ConditionForSegment<T>,
{
scorer_factory: F,
condition_factory: C,
impl<T, C, F> CustomScoreTopCollector<T, C, F>
where
T: 'static + PartialOrd + Copy + Sync + Send,
- C: CollectConditionFactory<T>,
- F: 'static + Sync + DocScorerFactory<T>,
+ C: ConditionForSegment<T>,
+ F: 'static + Sync + ScorerForSegment<T>,
{
pub fn new(limit: usize, condition_factory: C, scorer_factory: F) -> Self {
Self {
}
}
-pub trait DocScorerFactory<T>: Sync {
+pub trait ScorerForSegment<T>: Sync {
type Type: DocScorer<T>;
fn for_segment(&self, reader: &SegmentReader) -> Self::Type;
}
-impl<T, C, F> DocScorerFactory<T> for F
+impl<T, C, F> ScorerForSegment<T> for F
where
F: 'static + Sync + Send + Fn(&SegmentReader) -> C,
C: DocScorer<T>,
impl<T, C, F> Collector for CustomScoreTopCollector<T, C, F>
where
T: 'static + PartialOrd + Copy + Sync + Send,
- C: CollectConditionFactory<T> + Sync,
- F: 'static + DocScorerFactory<T>,
+ C: ConditionForSegment<T> + Sync,
+ F: 'static + ScorerForSegment<T>,
{
type Fruit = CollectionResult<T>;
type Child = CustomScoreTopSegmentCollector<T, C::Type, F::Type>;
pub struct CustomScoreTopSegmentCollector<T, C, F>
where
- C: CollectCondition<T>,
+ C: CheckCondition<T>,
{
scorer: F,
collector: ConditionalTopSegmentCollector<T, C>,
impl<T, C, F> CustomScoreTopSegmentCollector<T, C, F>
where
T: PartialOrd + Copy,
- C: CollectCondition<T>,
+ C: CheckCondition<T>,
F: DocScorer<T>,
{
fn new(segment_id: SegmentLocalId, limit: usize, condition: C, scorer: F) -> Self {
impl<T, C, F> SegmentCollector for CustomScoreTopSegmentCollector<T, C, F>
where
T: 'static + PartialOrd + Copy + Sync + Send,
- C: CollectCondition<T>,
+ C: CheckCondition<T>,
F: DocScorer<T>,
{
type Fruit = CollectionResult<T>;
Modified tique/src/top_collector/field.rs
use tantivy::{collector::Collector, schema::Field, SegmentReader};
-use super::{CollectConditionFactory, CollectionResult, CustomScoreTopCollector};
+use super::{CollectionResult, ConditionForSegment, CustomScoreTopCollector};
macro_rules! fast_field_custom_score_collector {
($name: ident, $type: ty, $reader: ident) => {
condition_factory: C,
) -> impl Collector<Fruit = CollectionResult<$type>>
where
- C: CollectConditionFactory<$type> + Sync,
+ C: ConditionForSegment<$type> + Sync,
{
let scorer_for_segment = move |reader: &SegmentReader| {
let scorer = reader
Modified tique/src/top_collector/mod.rs
mod conditional_collector;
mod custom_score;
mod field;
mod topk;
pub use conditional_collector::{
- CollectCondition, CollectConditionFactory, CollectionResult, ConditionalTopCollector,
+ CheckCondition, CollectionResult, ConditionForSegment, ConditionalTopCollector,
ConditionalTopSegmentCollector, SearchMarker,
};
pub use custom_score::CustomScoreTopCollector;