Dezi-Client
view release on metacpan or search on metacpan
lib/Dezi/Client.pm view on Meta::CPAN
interrogated at initial connect for the correct paths
for searching and indexing.
=item server_params I<params>
Passed internally to URI::Query and appended to server I<url>.
=item search I<path>
The URI path for searching. Dezi defaults to B</search>.
=item index I<path>
The URI path for indexing. Dezi defaults to B</index>.
=item username I<username>
=item password I<password>
If present, the username and password credentials will
be set in each internal HTTP::Request object for any
non-idempotent action (delete(), index(), commit(), rollback()).
=back
=cut
sub new {
my $class = shift;
my %args = @_;
if ( !%args or !exists $args{server} ) {
croak "server param required";
}
my $self = bless { server => delete $args{server} }, $class;
$self->{debug} = delete $args{debug} || 0;
if ( $self->{debug} ) {
require Data::Dump;
}
$self->{ua} = LWP::UserAgent->new();
if ( $args{search} and $args{index} ) {
$self->{search_uri} = $self->{server} . delete $args{search};
$self->{index_uri} = $self->{server} . delete $args{index};
$self->{commit_uri}
= $self->{server} . ( delete $args{commit} || 'commit' );
$self->{rollback_uri}
= $self->{server} . ( delete $args{rollback} || 'rollback' );
}
else {
my $uri = $self->{server};
if ( $args{server_params} ) {
$self->{server_params}
= URI::Query->new( delete $args{server_params} );
$uri .= '?' . $self->{server_params};
}
my $resp = $self->{ua}->get($uri);
if ( !$resp->is_success ) {
croak $resp->status_line;
}
my $paths = from_json( $resp->decoded_content );
if ( !$resp->is_success
or !$paths
or !$paths->{search}
or !$paths->{index} )
{
croak "Bad response from server $self->{server}: "
. $resp->status_line . " "
. $resp->decoded_content;
}
$self->{search_uri} = $paths->{search};
$self->{index_uri} = $paths->{index};
$self->{commit_uri} = $paths->{commit};
$self->{rollback_uri} = $paths->{rollback};
$self->{fields} = $paths->{fields};
$self->{facets} = $paths->{facets};
}
$self->{_creds} = {
username => delete $args{username},
password => delete $args{password},
};
if (%args) {
croak "Invalid params to new(): " . join( ", ", keys %args );
}
return $self;
}
=head2 index( I<doc> [, I<uri>, I<content-type>, I<GET_params>] )
Add or update a document. I<doc> should be one of:
=over
=item I<path>
I<path> should be a readable file on an accessible filesystem.
I<path> will be read with Search::Tools->slurp.
=item I<scalar_ref>
I<scalar_ref> should be a reference to a string representing
the document to be indexed. If this is the case, then I<uri>
must be passed as the second argument.
=item I<dezi_doc>
A Dezi::Doc object.
=back
I<uri> and I<content-type> are optional, except in the
I<scalar_ref> case, where I<uri> is required. If specified,
the values are passed explicitly in the HTTP headers to the Dezi
server. If not specified, they are (hopefully intelligently) guessed at.
Returns a L<HTTP::Response> object which can be interrogated to
determine the result. Example:
my $resp = $client->index( file => 'path/to/foo.html' );
if (!$resp->is_success) {
die "Failed to add path/to/foo.html to the Dezi index!";
}
I<GET_params> is an optional value. It is passed to URI::Query->new()
internally and appended to the search_server/index URL.
( run in 1.068 second using v1.01-cache-2.11-cpan-ecdf5575e8d )