ElasticSearch::Transport - Base class for communicating with ElasticSearch
ElasticSearch::Transport is a base class for the modules which communicate with the ElasticSearch server.
It handles failover to the next node in case the current node closes the connection. All requests are round-robin'ed to all live servers.
Currently, the available backends are:
http (default)
http
Uses LWP to communicate using HTTP. See ElasticSearch::Transport::HTTP
httplite
Uses HTTP::Lite to communicate using HTTP. See ElasticSearch::Transport::HTTPLite
thrift
Uses thrift to communicate using a compact binary protocol over sockets. See ElasticSearch::Transport::Thrift. You need to have the transport-thrift plugin installed on your ElasticSearch server for this to work.
transport-thrift
You shouldn't need to talk to the transport modules directly - everything happens via the main ElasticSearch class.
use ElasticSearch; my $e = ElasticSearch->new( servers => 'search.foo.com:9200', transport => 'httplite', timeout => '10', ); my $t = $e->transport; $t->protocol # eg 'http' $t->next_server # next node to use $t->current_server # eg '127.0.0.1:9200' ie last used node $t->default_servers # seed servers passed in to new() $t->servers # eg ['192.168.1.1:9200','192.168.1.2:9200'] $t->servers(@servers); # set new 'live' list $t->refresh_servers # refresh list of live nodes $t->clear_clients # clear all open clients $t->register('foo',$class) # register new Transport backend
Although the thrift interface has the right buzzwords (binary, compact, sockets), the generated Perl code is very slow. Until that is improved, I recommend one of the http backends instead.
The httplite backend is about 30% faster than the default http backend, and will probably become the default after more testing in production.
Note: my experience with HTTP::Lite so far has been flawless - I'm just being cautious.
See also: http://www.elasticsearch.com/docs/elasticsearch/modules/http and http://www.elasticsearch.com/docs/elasticsearch/modules/thrift
If you want to add a new transport backend, then these are the methods that you should subclass:
init()
$t->init($params)
Currently a no-op. Receives a HASH ref with the parameters passed in to new(), less servers, transport and timeout.
new()
servers
transport
timeout
Any parameters specific to your module should be deleted from $params
$params
send_request()
$json = $t->send_request($server,$params) where $params = { method => 'GET', cmd => '/_cluster', qs => { pretty => 1 }, data => '{ "foo": "bar"}', }
This must be overridden in the subclass - it is the method called to actually talk to the server.
See ElasticSearch::Transport::HTTP for an example implementation.
protocol()
$t->protocol
This must return the protocol in use, eg "http" or "thrift". It is used to extract the list of bound addresses from ElasticSearch, eg http_address or thrift_address.
"http"
"thrift"
http_address
thrift_address
client()
$client = $t->client($server)
Returns the client object used in "send_request()". The server param will look like "192.168.5.1:9200". It should store its clients in a PID specific slot in $t->{_client} as clear_clients() deletes this key.
"192.168.5.1:9200"
$t->{_client}
clear_clients()
See "client()" in ElasticSearch::Transport::HTTP and "client()" in ElasticSearch::Transport::Thrift for an example implementation.
You can register your Transport backend as follows:
BEGIN { ElasticSearch::Transport->register('mytransport',__PACKAGE__); }
ElasticSearch
ElasticSearch::Transport::HTTP
ElasticSearch::Transport::HTTPLite
ElasticSearch::Transport::Thrift
Copyright 2010 Clinton Gormley.
This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.
See http://dev.perl.org/licenses/ for more information.
To install ElasticSearch, copy and paste the appropriate command in to your terminal.
cpanm
cpanm ElasticSearch
CPAN shell
perl -MCPAN -e shell install ElasticSearch
For more information on module installation, please visit the detailed CPAN module installation guide.