HEX
Server: Apache
System: Linux pdx1-shared-a1-38 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64
User: mmickelson (3396398)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: //usr/share/perl5/Plucene/Search/PrefixQuery.pm
package Plucene::Search::PrefixQuery;

=head1 NAME 

Plucene::Search::TermQuery - a query that matches terms beginning with a string

=head1 SYNOPSIS

	# isa Plucene::Search::Query

	$prefix_query->normalize($norm);

	my       $ssw = $prefix_query->sum_squared_weights($searcher);
	my $as_string = $prefix_query->to_string($field);

=head1 DESCRIPTION

A query that matches a document containing terms I<beginning> with the
given string.

=cut

use strict;
use warnings;
use base 'Plucene::Search::Query';
use Plucene::Search::BooleanQuery;
use Plucene::Search::TermQuery;

__PACKAGE__->mk_accessors(qw/ prefix reader /);

sub prepare { $_[0]->reader($_[1]) }

# This returns the underlying boolean query.

sub _query {
	my $self = shift;
	return $self->{query} if exists $self->{query};
	my $q      = new Plucene::Search::BooleanQuery;
	my $prefix = $self->prefix;
	my $enum   = $self->reader->terms($prefix);
	my ($field, $text) = ($prefix->field, $prefix->text);
	do {
		my $term = $enum->term;
		goto DONE
			unless $term
			and $term->text =~ /^\Q$text/
			and $term->field eq $field;
		my $tq = Plucene::Search::TermQuery->new({ term => $term });
		$tq->boost($self->boost);
		$q->add($tq, 0, 0);
	} while $enum->next;
	DONE: $self->{query} = $q;
}

=head2 to_string

	$q->to_string

Convert the query to a readable string format

=head2 sum_squared_weights

The sum sqaured weights of the query.

=head2 normalize

Normalize the query.

=cut

sub to_string {
	my ($self, $field) = @_;
	my $s = "";
	$s = $self->prefix->field . ":" if $self->prefix->field ne $field;
	$s .= $self->prefix->text . "*";
	$s .= "^" . $self->boost unless $self->boost == 1;
	$s;
}

sub sum_squared_weights { shift->_query->sum_squared_weights(@_) }
sub normalize           { shift->_query->normalize(@_) }
sub _scorer             { shift->_query->_scorer(@_) }

1;