summa-core 0.22.6

Summa Core library
Documentation
use tantivy::collector::{ScoreSegmentTweaker, ScoreTweaker};
use tantivy::{DocId, SegmentReader};

use crate::scorers::{EvalScorer, SegmentEvalScorer};

pub(crate) struct EvalScorerSegmentScoreTweaker {
    segment_eval_scorer: SegmentEvalScorer,
}

impl EvalScorerSegmentScoreTweaker {
    pub fn new(segment_eval_scorer: SegmentEvalScorer) -> Self {
        EvalScorerSegmentScoreTweaker { segment_eval_scorer }
    }
}

impl ScoreSegmentTweaker<f64> for EvalScorerSegmentScoreTweaker {
    fn score(&mut self, doc: DocId, score: f32) -> f64 {
        self.segment_eval_scorer.score(doc, score)
    }
}

pub(crate) struct EvalScorerTweaker {
    eval_scorer_seed: EvalScorer,
}

impl EvalScorerTweaker {
    pub fn new(eval_scorer_seed: EvalScorer) -> Self {
        EvalScorerTweaker { eval_scorer_seed }
    }
}

#[async_trait]
impl ScoreTweaker<f64> for EvalScorerTweaker {
    type Child = EvalScorerSegmentScoreTweaker;

    fn segment_tweaker(&self, segment_reader: &SegmentReader) -> tantivy::Result<Self::Child> {
        Ok(EvalScorerSegmentScoreTweaker::new(
            self.eval_scorer_seed.get_for_segment_reader(segment_reader).expect("Wrong eval expression"),
        ))
    }

    async fn segment_tweaker_async(&self, segment_reader: &SegmentReader) -> tantivy::Result<Self::Child> {
        Ok(EvalScorerSegmentScoreTweaker::new(
            self.eval_scorer_seed
                .get_for_segment_reader_async(segment_reader)
                .await
                .expect("Wrong eval expression"),
        ))
    }
}