LucyX-Simple
view release on metacpan or search on metacpan
lib/LucyX/Simple.pm view on Meta::CPAN
'default' => sub{ return 100 },
);
sub sorted_search{
my ( $self, $query, $criteria, $page ) = @_;
my @rules;
foreach my $key ( keys( %{$criteria} ) ){
push(
@rules,
Lucy::Search::SortRule->new(
field => $key,
reverse => $criteria->{ $key },
)
);
}
return $self->search( $query, $page, Lucy::Search::SortSpec->new( rules => \@rules ) );
}
sub search{
my ( $self, $query_string, $page, $sort_spec ) = @_;
Exception::Simple->throw('no query string') if !$query_string;
$page ||= 1;
my $query = $self->_query_parser->parse( $query_string );
my $search_options = {
'query' => $query,
'offset' => ( ( $self->entries_per_page * $page ) - $self->entries_per_page ),
'num_wanted' => $self->entries_per_page,
};
$search_options->{'sort_spec'} = $sort_spec if $sort_spec;
my $hits = $self->_searcher->hits( %{$search_options} );
my $pager = Data::Page->new($hits->total_hits, $self->entries_per_page, $page);
my @results;
while ( my $hit = $hits->next ) {
my $result = {};
foreach my $field ( @{$self->schema} ){
$result->{ $field->{'name'} } = $hit->{ $field->{'name'} };
}
push( @results, $self->resultclass->new( $result ) );
}
return ( \@results, $pager ) if scalar(@results);
Exception::Simple->throw('no results');
}
sub create{
my ( $self, $document ) = @_;
Exception::Simple->throw('no document') if ( !$document );
$self->_indexer->add_doc( $document );
}
sub update_or_create{
my ( $self, $document, $pk ) = @_;
Exception::Simple->throw('no document') if !$document;
$pk ||= 'id';
my $pv = $document->{ $pk };
Exception::Simple->throw('no primary key value') if !$pv;
$self->delete( $pk, $pv );
$self->create( $document );
}
sub delete{
my ( $self, $key, $value ) = @_;
Exception::Simple->throw( 'missing key' ) if !defined( $key );
Exception::Simple->throw( 'missing value' ) if !defined( $value );
#delete only works on finished indexes
$self->commit;
$self->_indexer->delete_by_term(
'field' => $key,
'term' => $value,
);
}
sub commit{
my ( $self, $optimise ) = @_;
$self->_indexer->optimize if $optimise;
$self->_indexer->commit;
$self->_clear_indexer;
$self->_clear_searcher;
}
__PACKAGE__->meta->make_immutable;
( run in 0.924 second using v1.01-cache-2.11-cpan-fe3c2283af0 )