package Plucene::Search::Scorer;
=head1 NAME
Plucene::Search::Scorer - base class for scorers
=head1 DESCRIPTION
Abstract base class for scoring.
=cut
use strict;
use warnings;
use Plucene::Search::Similarity;
=head2 score
This must be defined in a subclass
=cut
sub score { die "score must be defined in a subclass" }
sub _score_it {
my ($self, $freq, $doc, $results) = @_;
return unless $freq > 0;
my $score = Plucene::Search::Similarity->tf($freq) * $self->weight;
my $norm = substr($self->norms, $doc, 1);
my $norm_freq = Plucene::Search::Similarity->byte_norm($norm);
$score *= $norm_freq;
$results->collect($doc, $score);
}
1;