The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package TestApp::C::Plucene;

use strict;
use base 'Catalyst::Base';

my $plucene = 'TestApp::M::Search::Plucene';

sub add : Local {
    my ( $self, $c, $key ) = @_;
    
    my $data = {
        $key => {},
    };
    foreach my $param ( $c->req->param ) {
        $data->{$key}->{$param} = $c->req->params->{$param};
    }
    
    $plucene->add( $data );
    
    $c->res->output( 'ok' );
}

sub query_total_hits : Local {
    my ( $self, $c ) = @_;
    
    my $results = $plucene->query( $c->req->params->{q} );
    my $total_hits = $results->get_total_hits;
    $c->res->output( $total_hits );
}

sub query_items : Local {
    my ( $self, $c ) = @_;
    
    my $results = $plucene->query( $c->req->params->{q} );
    my @items = $results->get_items;
    my $output;
    foreach my $item ( @items ) {
        $output .= 'score=' . $item->get_score . ' ';
        $output .= 'key='   . $item->get_key   . ' ';
    }
    $c->res->output( $output );
}

sub query_data : Local {
    my ( $self, $c ) = @_;
    
    my $results = $plucene->query( $c->req->params->{q} );
    my @items = $results->get_items;
    my $output;
    foreach my $item ( @items ) {
        foreach my $field ( $item->get_fields ) {
            $output .= $field . '=' . $item->get($field) . ' ';
        }
    }
    $c->res->output( $output );
}

sub is_indexed : Local {
    my ( $self, $c, $key ) = @_;
   
    $c->res->output( $plucene->is_indexed( $key ) || 'no results' );
}

sub optimize : Local {
    my ( $self, $c ) = @_;
    
    $plucene->optimize;
    $c->res->output( 'ok' );
}

1;