KinoSearch1
view release on metacpan or search on metacpan
lib/KinoSearch1/Search/Query.pm view on Meta::CPAN
package KinoSearch1::Search::Query;
use strict;
use warnings;
use KinoSearch1::Util::ToolSet;
use base qw( KinoSearch1::Util::Class );
BEGIN {
__PACKAGE__->init_instance_vars(
# constructor params / members
boost => 1,
);
__PACKAGE__->ready_get_set(qw( boost ));
}
=begin comment
my $string = $query->to_string( $field_name );
Return a string representation of the query. $field_name is a default field,
and affects how the string is generated -- for instance, if a TermQuery's
field matches $field_name, the field will be omitted, while if it doesn't
match, the field will be included in the string.
=end comment
=cut
sub to_string { shift->abstract_death }
=begin comment
my $weight = $query->create_weight($searcher);
Only low-level Queries which rewrite themselves implement this method.
=end comment
=cut
sub create_weight { shift->abstract_death }
# Derive a weight for a high-level query.
sub to_weight { # in Lucene, this method is simply "weight"
my ( $self, $searcher ) = @_;
my $rewritten_self = $searcher->rewrite($self);
my $weight = $rewritten_self->create_weight($searcher);
my $sum = $weight->sum_of_squared_weights;
my $sim = $self->get_similarity($searcher);
my $norm = $sim->query_norm($sum);
$weight->normalize($norm);
return $weight;
}
=begin comment
my $rewritten_query = $query->rewrite( $index_reader );
Called by high-level Queries that wish to reformulate themselves as
agglomerations of low-level queries.
=end comment
=cut
sub rewrite { return shift }
=begin comment
my @terms = $query->extract_terms;
Return all the Terms within this query.
=end comment
=cut
sub extract_terms { shift->abstract_death }
# These will be needed by MultiSearcher if we add queries which rewrite
# themselves.
sub combine { shift->todo_death }
sub merge_boolean_queries { shift->todo_death }
# return the Similarity implementation used by the Query.
sub get_similarity {
my ( $self, $searcher, $field_name ) = @_;
# This can be overriden in subclasses, allowing alternative Sims.
return defined $field_name
? $searcher->get_similarity($field_name)
: $searcher->get_similarity;
}
sub clone { shift->todo_death }
1;
__END__
=head1 NAME
KinoSearch1::Search::Query - base class for search queries
=head1 SYNOPSIS
# abstract base class
=head1 DESCRIPTION
Base class for queries to be performed against an invindex.
L<TermQuery|KinoSearch1::Search::TermQuery> is one example.
=head1 METHODS
=head2 set_boost get_boost
$term_query_a->set_boost(2);
$boolean_query->add_clause( query => $term_query_a, occur => 'SHOULD' );
$boolean_query->add_clause( query => $term_query_b, occur => 'SHOULD' );
The boost of any Query is 1.0 by default. Setting boost to a number greater
( run in 1.828 second using v1.01-cache-2.11-cpan-2398b32b56e )