Datahub-Factory

 view release on metacpan or  search on metacpan

lib/Datahub/Factory/Indexer/Solr.pm  view on Meta::CPAN

package Datahub::Factory::Indexer::Solr;

use Datahub::Factory::Sane;

our $VERSION = '1.77';

use Moo;
use Catmandu;
use HTTP::Request::Common;
use HTTP::Request::StreamingUpload;
use JSON;
use LWP::UserAgent;
use URI::URL;
use XML::LibXML;
use namespace::clean;

with 'Datahub::Factory::Indexer';

has request_handler => (is => 'ro', required => 1);

sub _build_out {
    my $self = shift;

    my $ua = LWP::UserAgent->new(
        env_proxy  => 1,
        keep_alive => 1,
        timeout    => 120,
        agent      => 'Mozilla/5.0',
    );

    return $ua;
}

sub index {
	my $self = shift;

    my ($request_handler, $response, $request); 

    # Index the JSON data

    $request_handler = url $self->{request_handler};
    $request_handler->equery('commit=true');

    $request = HTTP::Request::StreamingUpload->new(
        POST    => "$request_handler",
        path    => $self->{file_name},
        headers => HTTP::Headers->new(
            'Content-Type'   => 'application/json',
            'Content-Length' => -s $self->{file_name},
        ),
    );

    $response = $self->out->request($request);

    if ($response->is_success) {
        return decode_json($response->decoded_content);
    } else {
        Catmandu::HTTPError->throw({
            code             => $response->code,
            message          => $response->message,
            url              => $response->request->uri->as_string,
            method           => $response->request->method,
            request_headers  => [],
            request_body     => $response->request->content,
            response_headers => [],
            response_body    => $response->decoded_content,
        });
        return undef;
    }
}

1;

__END__

=encoding utf-8

=head1 NAME

Datahub::Factory::Indexer::Solr - Index data in Solr via a data import handler.

=head1 SYNOPSIS

    use Datahub::Factory;

    my $indexer = Datahub::Factory->indexer('Solr')->new('request_handler' => 'http://path');



( run in 2.934 seconds using v1.01-cache-2.11-cpan-437f7b0c052 )