<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<link rel='stylesheet' href='https://metacpan.org/_asset/288683e3285b02987a848283f0f92207' type='text/css'>
<script type='text/javascript' src='https://metacpan.org/_asset/12b19d083bf773523c065d4d729f0327'></script>
</head>
<body>
<div class="pod">
<ul id="index">
<li><a href="#SYNOPSIS">SYNOPSIS</a></li>
<li><a href="#DESCRIPTION">DESCRIPTION</a></li>
<li><a href="#CONVENTIONS">CONVENTIONS</a>
<ul>
<li><a href="#Parameter-passing">Parameter passing</a></li>
<li><a href="#Path-parameters">Path parameters</a></li>
<li><a href="#Query-string-parameters">Query-string parameters</a></li>
<li><a href="#Body-parameter">Body parameter</a></li>
<li><a href="#Ignore-parameter">Ignore parameter</a></li>
</ul>
</li>
<li><a href="#GENERAL-METHODS">GENERAL METHODS</a>
<ul>
<li><a href="#info-"><code>info()</code></a></li>
<li><a href="#ping-"><code>ping()</code></a></li>
<li><a href="#indices-"><code>indices()</code></a></li>
<li><a href="#cluster-"><code>cluster()</code></a></li>
</ul>
</li>
<li><a href="#DOCUMENT-CRUD-METHODS">DOCUMENT CRUD METHODS</a>
<ul>
<li><a href="#index-"><code>index()</code></a></li>
<li><a href="#create-"><code>create()</code></a></li>
<li><a href="#get-"><code>get()</code></a></li>
<li><a href="#get_source-"><code>get_source()</code></a></li>
<li><a href="#exists-"><code>exists()</code></a></li>
<li><a href="#delete-"><code>delete()</code></a></li>
<li><a href="#update-"><code>update()</code></a></li>
</ul>
</li>
<li><a href="#BULK-DOCUMENT-CRUD-METHODS">BULK DOCUMENT CRUD METHODS</a>
<ul>
<li><a href="#bulk-"><code>bulk()</code></a></li>
<li><a href="#mget-"><code>mget()</code></a></li>
<li><a href="#delete_by_query-"><code>delete_by_query()</code></a></li>
</ul>
</li>
<li><a href="#SEARCH-METHODS">SEARCH METHODS</a>
<ul>
<li><a href="#search-"><code>search()</code></a></li>
<li><a href="#count-"><code>count()</code></a></li>
<li><a href="#scroll-"><code>scroll()</code></a></li>
<li><a href="#clear_scroll-"><code>clear_scroll()</code></a></li>
<li><a href="#msearch-"><code>msearch()</code></a></li>
<li><a href="#explain-"><code>explain()</code></a></li>
<li><a href="#percolate-"><code>percolate()</code></a></li>
<li><a href="#suggest-"><code>suggest()</code></a></li>
<li><a href="#mlt-"><code>mlt()</code></a></li>
</ul>
</li>
</ul>
<h1 id="SYNOPSIS">SYNOPSIS</h1>
<p>Create a client:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> use Elasticsearch;
my $e = Elasticsearch->new(
client => 'Direct' # default
);</pre>
<p>Index a doc:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $e->index(
index => 'my_index',
type => 'blog_post',
id => 123,
body => {
title => "Elasticsearch clients",
content => "Interesting content...",
date => "2013-09-23"
}
);</pre>
<p>Get a doc:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $e->get(
index => 'my_index',
type => 'my_type',
id => 123
);</pre>
<p>Search for docs:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $results = $e->search(
index => 'my_index',
body => {
query => {
match => {
title => "elasticsearch"
}
}
}
);</pre>
<p>Index-level requests:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $e->indices->create( index => 'my_index' );
$e->indices->delete( index => 'my_index' )</pre>
<p>Cluster-level requests:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $state = $e->cluster->state;
$stats = $e->cluster->node_stats;</pre>
<h1 id="DESCRIPTION">DESCRIPTION</h1>
<p>The <a href="./Elasticsearch::Client::Direct">Elasticsearch::Client::Direct</a> class provides the default client that is returned by:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $e = Elasticsearch->new;</pre>
<p>It is intended to be as close as possible to the native REST API that Elasticsearch uses, so that it is easy to translate the <a href="http://www.elasticsearch/guide">Elasticsearch reference documentation</a> for an API to the equivalent in this client.</p>
<p>This class provides the methods for <a href="#DOCUMENT-CRUD-METHODS">document CRUD</a>, <a href="#BULK-DOCUMENT-CRUD-METHODS">bulk document CRUD</a> and <a href="#SEARCH-METHODS">search</a>. It also provides access to clients for managing <a href="#indices-">indices</a> and the <a href="#cluster-">cluster</a>.</p>
<h1 id="CONVENTIONS">CONVENTIONS</h1>
<h2 id="Parameter-passing">Parameter passing</h2>
<p>Parameters can be passed to any request method as a list or as a hash reference. The following two statements are equivalent:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $e->search( size => 10 );
$e->search({size => 10});</pre>
<h2 id="Path-parameters">Path parameters</h2>
<p>Any values that should be included in the URL path, eg <code>/{index}/{type}</code> should be passed as top level parameters:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $e->search( index => 'my_index', type => 'my_type' );</pre>
<p>Alternatively, you can specify a <code>path</code> parameter directly:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $e->search( path => '/my_index/my_type' );</pre>
<h2 id="Query-string-parameters">Query-string parameters</h2>
<p>Any values that should be included in the query string should be passed as top level parameters:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $e->search( size => 10 );</pre>
<p>If you pass in a <code>\%params</code> hash, then it will be included in the query string parameters without any error checking. The following:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $e->search( size => 10, params => { from => 5, size => 5 })</pre>
<p>would result in this query string:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> ?from=5&size=10</pre>
<h2 id="Body-parameter">Body parameter</h2>
<p>The request body should be passed in the <code>body</code> key:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $e->search(
body => {
query => {...}
}
);</pre>
<p>The body can also be a UTF8-decoded string, which will be converted into UTF-8 bytes and passed as is:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $e->analyze( body => "The quick brown fox");</pre>
<h2 id="Ignore-parameter">Ignore parameter</h2>
<p>Normally, any HTTP status code outside the 200-299 range will result in an error being thrown. To suppress these errors, you can specify which status codes to ignore in the <code>ignore</code> parameter.</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $e->indices->delete(
index => 'my_index',
ignore => 404
);</pre>
<p>This is most useful for <a href="./Elasticsearch::Error#Elasticsearch::Error::Missing">Missing</a> errors, which are triggered by a <code>404</code> status code when some requested resource does not exist.</p>
<p>Multiple error codes can be specfied with an array:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $e->indices->delete(
index => 'my_index',
ignore => [404,409]
);</pre>
<h1 id="GENERAL-METHODS">GENERAL METHODS</h1>
<h2 id="info-"><code>info()</code></h2>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $info = $e->info</pre>
<p>Returns information about the version of Elasticsearch that the responding node is running.</p>
<h2 id="ping-"><code>ping()</code></h2>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $e->ping</pre>
<p>Pings a node in the cluster and returns <code>1</code> if it receives a <code>200</code> response, otherwise it throws an error.</p>
<h2 id="indices-"><code>indices()</code></h2>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $indices_client = $e->indices;</pre>
<p>Returns an <a href="./Elasticsearch::Client::Direct::Indices">Elasticsearch::Client::Direct::Indices</a> object which can be used for managing indices, eg creating, deleting indices, managing mapping, index settings etc.</p>
<h2 id="cluster-"><code>cluster()</code></h2>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $cluster_client = $e->cluster;</pre>
<p>Returns an <a href="./Elasticsearch::Client::Direct::Cluster">Elasticsearch::Client::Direct::Cluster</a> object which can be used for managing the cluster, eg cluster-wide settings, cluster health, node information and stats.</p>
<h1 id="DOCUMENT-CRUD-METHODS">DOCUMENT CRUD METHODS</h1>
<p>These methods allow you to perform create, index, update and delete requests for single documents:</p>
<h2 id="index-"><code>index()</code></h2>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $response = $e->index(
index => 'index_name', # required
type => 'type_name', # required
id => 'doc_id', # optional, otherwise auto-generated
body => { document } # required
);</pre>
<p>The <code>index()</code> method is used to index a new document or to reindex an existing document.</p>
<p>Query string parameters: <code>consistency</code>, <code>op_type</code>, <code>parent</code>, <code>percolate</code>, <code>refresh</code>, <code>replication</code>, <code>routing</code>, <code>timeout</code>, <code>timestamp</code>, <code>ttl</code>, <code>version</code>, <code>version_type</code></p>
<p>See the <a href="http://www.elasticsearch.org/guide/reference/api/index_/">index docs</a> for more information.</p>
<h2 id="create-"><code>create()</code></h2>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $response = $e->create(
index => 'index_name', # required
type => 'type_name', # required
id => 'doc_id', # optional, otherwise auto-generated
body => { document } # required
);</pre>
<p>The <code>create()</code> method works exactly like the <a href="#index-">"index()"</a> method, except that it will throw a <code>Conflict</code> error if a document with the same <code>index</code>, <code>type</code> and <code>id</code> already exists.</p>
<p>Query string parameters: <code>consistency</code>, <code>op_type</code>, <code>parent</code>, <code>percolate</code>, <code>refresh</code>, <code>replication</code>, <code>routing</code>, <code>timeout</code>, <code>timestamp</code>, <code>ttl</code>, <code>version</code>, <code>version_type</code></p>
<p>See the <a href="http://www.elasticsearch.org/guide/reference/api/create/">create docs</a> for more information.</p>
<h2 id="get-"><code>get()</code></h2>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $response = $e->get(
index => 'index_name', # required
type => 'type_name', # required
id => 'doc_id', # required
);</pre>
<p>The <code>get()</code> method will retrieve the document with the specified <code>index</code>, <code>type</code> and <code>id</code>, or will throw a <code>Missing</code> error.</p>
<p>Query string parameters: <code>_source</code>, <code>_source_exclude</code>, <code>_source_include</code>, <code>fields</code>, <code>parent</code>, <code>preference</code>, <code>realtime</code>, <code>refresh</code>, <code>routing</code></p>
<p>See the <a href="http://www.elasticsearch.org/guide/reference/api/get/">get docs</a> for more information.</p>
<h2 id="get_source-"><code>get_source()</code></h2>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $response = $e->get_source(
index => 'index_name', # required
type => 'type_name', # required
id => 'doc_id', # required
);</pre>
<p>The <code>get_source()</code> method works just like the <a href="#get-">"get()"</a> method except that it returns just the <code>_source</code> field (the value of the <code>body</code> parameter in the <a href="#index-">"index()"</a> method) instead of returning the <code>_source</code> field plus the document metadata, ie the <code>_index</code>, <code>_type</code> etc.</p>
<p>Query string parameters: <code>_source_exclude</code>, <code>_source_include</code>, <code>parent</code>, <code>preference</code>, <code>realtime</code>, <code>refresh</code>, <code>routing</code></p>
<p>See the <a href="http://www.elasticsearch.org/guide/reference/api/get/">get_source docs</a> for more information.</p>
<h2 id="exists-"><code>exists()</code></h2>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $response = $e->exists(
index => 'index_name', # required
type => 'type_name', # required
id => 'doc_id', # required
);</pre>
<p>The <code>exists()</code> method returns <code>1</code> if a document with the specified <code>index</code>, <code>type</code> and <code>id</code> exists, or an empty string if it doesn't.</p>
<p>Query string parameters: <code>parent</code>, <code>preference</code>, <code>realtime</code>, <code>refresh</code>, <code>routing</code></p>
<p>See the <a href="http://www.elasticsearch.org/guide/reference/api/get/">exists docs</a> for more information.</p>
<h2 id="delete-"><code>delete()</code></h2>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $response = $e->delete(
index => 'index_name', # required
type => 'type_name', # required
id => 'doc_id', # required
);</pre>
<p>The <code>delete()</code> method will delete the document with the specified <code>index</code>, <code>type</code> and <code>id</code>, or will throw a <code>Missing</code> error.</p>
<p>Query string parameters: <code>consistency</code>, <code>parent</code>, <code>refresh</code>, <code>replication</code>, <code>routing</code>, <code>timeout</code>, <code>version</code>, <code>version_type</code></p>
<p>See the <a href="http://www.elasticsearch.org/guide/reference/api/delete/">delete docs</a> for more information.</p>
<h2 id="update-"><code>update()</code></h2>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $response = $e->update(
index => 'index_name', # required
type => 'type_name', # required
id => 'doc_id', # required
body => { update } # required
);</pre>
<p>The <code>update()</code> method updates a document with the corresponding <code>index</code>, <code>type</code> and <code>id</code> if it exists. Updates can be performed either by:</p>
<ul>
<li><p>providing a partial document to be merged in to the existing document:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $response = $e->update(
...,
body => {
doc => { new_field => 'new_value'},
}
);</pre>
</li>
<li><p>or with a script:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $response = $e->update(
...,
body => {
script => "ctx._source.counter += incr",
params => { incr => 5 }
}
);</pre>
</li>
</ul>
<p>Query string parameters: <code>consistency</code>, <code>fields</code>, <code>lang</code>, <code>parent</code>, <code>percolate</code>, <code>realtime</code>, <code>refresh</code>, <code>replication</code>, <code>retry_on_conflict</code>, <code>routing</code>, <code>script</code>, <code>timeout</code>, <code>timestamp</code>, <code>ttl</code>, <code>version</code>, <code>version_type</code></p>
<p>See the <a href="http://www.elasticsearch.org/guide/reference/api//">update docs</a> for more information.</p>
<h1 id="BULK-DOCUMENT-CRUD-METHODS">BULK DOCUMENT CRUD METHODS</h1>
<p>The bulk document CRUD methods are used for running multiple CRUD actions within a single request. By reducing the number of network requests that need to be made, bulk requests greatly improve performance.</p>
<h2 id="bulk-"><code>bulk()</code></h2>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $response = $e->bulk(
index => 'index_name', # required if type specified
type => 'type_name', # optional
body => [ actions ] # required
);</pre>
<p>See <a href="./Elasticsearch::Bulk">Elasticsearch::Bulk</a> for a helper module that makes bulk indexing simpler to use.</p>
<p>The <code>bulk()</code> method can perform multiple <a href="#index-">"index()"</a>, <a href="#create-">"create()"</a>, <a href="#delete-">"delete()"</a> or <a href="#update-">"update()"</a> actions with a single request. The <code>body</code> parameter expects an array containing the list of actions to perform.</p>
<p>An <i>action</i> consists of an initial metadata hash ref containing the action type, plus the associated metadata, eg :</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> { delete => { _index => 'index', _type => 'type', _id => 123 }}</pre>
<p>The <code>index</code> and <code>create</code> actions then expect a hashref containing the document itself:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> { create => { _index => 'index', _type => 'type', _id => 123 }},
{ title => "A newly created document" }</pre>
<p>And the <code>update</code> action expects a hashref containing the update commands, eg:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> { update => { _index => 'index', _type => 'type', _id => 123 }},
{ script => "ctx._source.counter+=1" }</pre>
<p>Each action can include the same parameters that you would pass to the equivalent <a href="#index-">"index()"</a>, <a href="#create-">"create()"</a>, <a href="#delete-">"delete()"</a> or <a href="#update-">"update()"</a> request, except that <code>_index</code>, <code>_type</code> and <code>_id</code> must be specified with the preceding underscore. All other parameters can be specified with or without the underscore.</p>
<p>For instance:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $response = $e->bulk(
index => 'index_name', # default index name
type => 'type_name', # default type name
body => [
# create action
{ create => {
_index => 'not_the_default_index',
_type => 'not_the_default_type',
_id => 123
}},
{ title => 'Foo' },
# index action
{ index => { _id => 124 }},
{ title => 'Foo' },
# delete action
{ delete => { _id => 125 }},
# update action
{ update => { _id => 126 }},
{ script => "ctx._source.counter+1" }
]
);</pre>
<p>Each action is performed separately. One failed action will not cause the others to fail as well.</p>
<p>Query string parameters: <code>consistency</code>, <code>refresh</code>, <code>replication</code>, <code>type</code></p>
<p>See the <a href="http://www.elasticsearch.org/guide/reference/api/bulk/">bulk docs</a> for more information.</p>
<h2 id="mget-"><code>mget()</code></h2>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $results = $e->mget(
index => 'default_index', # optional, required when type specified
type => 'default_type', # optional
body => { docs or ids } # required
);</pre>
<p>The <code>mget()</code> method will retrieve multiple documents with a single request. The <code>body</code> consists of an array of documents to retrieve:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $results = $e->mget(
index => 'default_index',
type => 'default_type',
body => {
docs => [
{ _id => 1},
{ _id => 2, _type => 'not_the_default_type' }
]
}
);</pre>
<p>You can also pass any of the other parameters that the <a href="#get-">"get()"</a> request accepts.</p>
<p>If you have specified an <code>index</code> and <code>type</code>, you can just include the <code>ids</code> of the documents to retrieve:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $results = $e->mget(
index => 'default_index',
type => 'default_type',
body => {
ids => [ 1, 2, 3]
}
);</pre>
<p>Query string parameters: <code>_source</code>, <code>_source_exclude</code>, <code>_source_include</code>, <code>fields</code>, <code>preference</code>, <code>realtime</code>, <code>refresh</code></p>
<p>See the <a href="http://www.elasticsearch.org/guide/reference/api/multi-get/">mget docs</a> for more information.</p>
<h2 id="delete_by_query-"><code>delete_by_query()</code></h2>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $result = $e->delete_by_query(
index => 'index' | \@indices, # optional
type => 'type' | \@types, # optional
body => { query } # required
);</pre>
<p>The <code>delete_by_query()</code> method deletes all documents which match the query. For instance, to delete all documents from 2012:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $result = $e->delete_by_query(
body => {
range => {
date => {
gte => '2012-01-01',
lt => '2013-01-01'
}
}
}
);</pre>
<p>Query string parameters: <code>analyzer</code>, <code>consistency</code>, <code>default_operator</code>, <code>df</code>, <code>ignore_indices</code>, <code>q</code>, <code>replication</code>, <code>routing</code>, <code>source</code>, <code>timeout</code></p>
<p>See the <a href="http://www.elasticsearch.org/guide/reference/api/delete-by-query/">delete_by_query docs</a> for more information.</p>
<h1 id="SEARCH-METHODS">SEARCH METHODS</h1>
<p>The search methods are used for querying documents in one, more or all indices and of one, more or all types:</p>
<h2 id="search-"><code>search()</code></h2>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $results = $e->search(
index => 'index' | \@indices, # optional
type => 'type' | \@types, # optional
body => { search params } # optional
);</pre>
<p>The <code>search()</code> method searches for matching documents in one or more indices. It is just as easy to search a single index as it is to search all the indices in your cluster. It can also return <a href="http://www.elasticsearch.org/guide/reference/api/search/facets/">facets</a> (aggregations on particular fields), <a href="http://www.elasticsearch.org/guide/reference/api/search/highlighting/">highlighted snippets</a> and <a href="http://www.elasticsearch.org/guide/reference/api/search/phrase-suggest/">did-you-mean</a> or <a href="http://www.elasticsearch.org/guide/reference/api/search/completion-suggest.html">search-as-you-type</a> suggestions.</p>
<p>The <i>lite</i> <a href="http://www.elasticsearch.org/guide/reference/api/search/uri-request.html">version of search</a> allows you to specify a query string in the <code>q</code> parameter, using the Lucene query string syntax:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $results = $e->search( q => 'title:(elasticsearch clients)');</pre>
<p>However, the preferred way to search is by using the <a href="http://www.elasticsearch.org/guide/reference/query-dsl/">Query DSL</a> to create a query, and passing that <code>query</code> in the <a href="http://www.elasticsearch.org/guide/reference/api/search/request-body/">request body</a>:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $results = $e->search(
body => {
query => {
match => { title => 'Elasticsearch clients'}
}
}
);</pre>
<p>Query string parameters: <code>_source</code>, <code>_source_exclude</code>, <code>_source_include</code>, <code>analyze_wildcard</code>, <code>analyzer</code>, <code>default_operator</code>, <code>df</code>, <code>explain</code>, <code>fields</code>, <code>from</code>, <code>ignore_indices</code>, <code>indices_boost</code>, <code>lenient</code>, <code>lowercase_expanded_terms</code>, <code>preference</code>, <code>q</code>, <code>routing</code>, <code>scroll</code>, <code>search_type</code>, <code>size</code>, <code>sort</code>, <code>source</code>, <code>stats</code>, <code>suggest_field</code>, <code>suggest_mode</code>, <code>suggest_size</code>, <code>suggest_text</code>, <code>timeout</code>, <code>version</code></p>
<p>See the <a href="http://www.elasticsearch.org/guide/reference/api/search/request-body/">search reference</a> for more information.</p>
<h2 id="count-"><code>count()</code></h2>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $results = $e->count(
index => 'index' | \@indices, # optional
type => 'type' | \@types, # optional
body => { query } # optional
)</pre>
<p>The <code>count()</code> method returns just the total count of all documents matching the query:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $results = $e->count(
body => { match => { title => 'Elasticsearch clients' }}
);</pre>
<p>Query string parameters: <code>ignore_indices</code>, <code>min_score</code>, <code>preference</code>, <code>routing</code>, <code>source</code></p>
<p>See the <a href="http://www.elasticsearch.org/guide/reference/api/count/">count docs</a> for more information.</p>
<h2 id="scroll-"><code>scroll()</code></h2>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $results = $e->scroll(
scroll => '1m',
scroll_id => $id
);</pre>
<p>When a <a href="#search-">"search()"</a> has been performed with the <code>scroll</code> parameter, the <code>scroll()</code> method allows you to keep pulling more results until the results are exhausted.</p>
<p><b>NOTE:</b> you will almost always want to set the <code>search_type</code> to <code>scan</code> in your original <code>search()</code> request.</p>
<p>See <a href="./Elasticsearch::Scroll">Elasticsearch::Scroll</a> for a helper utility which makes managing scroll requests much easier.</p>
<p>Query string parameters: <code>scroll</code>, <code>scroll_id</code></p>
<p>See the <a href="http://www.elasticsearch.org/guide/reference/api/search/scroll/">scroll docs</a> and the <a href="http://www.elasticsearch.org/guide/reference/api/search/search-type/">search_type docs</a> for more information.</p>
<h2 id="clear_scroll-"><code>clear_scroll()</code></h2>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $response = $e->clear_scroll(
scroll_id => $id | \@ids # required
);</pre>
<p>The <code>clear_scroll()</code> method can clear unfinished scroll requests, freeing up resources on the server.</p>
<h2 id="msearch-"><code>msearch()</code></h2>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $results = $e->msearch(
index => 'default_index' | \@indices, # optional
type => 'default_type' | \@types, # optional
body => [ searches ] # required
);</pre>
<p>The <code>msearch()</code> method allows you to perform multiple searches in a single request. Similar to the <a href="#bulk-">"bulk()"</a> request, each search request in the <code>body</code> consists of two hashes: the metadata hash then the search request hash (the same data that you'd specify in the <code>body</code> of a <a href="#search-">"search()"</a> request). For instance:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $results = $e->msearch(
index => 'default_index',
type => ['default_type_1', 'default_type_2'],
body => [
# uses defaults
{},
{ query => { match_all => {} }},
# uses a custom index
{ index => 'not_the_default_index' },
{ query => { match_all => {} }}
]
);</pre>
<p>Query string parameters: <code>search_type</code></p>
<p>See the <a href="http://www.elasticsearch.org/guide/reference/api/multi-search/">msearch docs</a> for more information.</p>
<h2 id="explain-"><code>explain()</code></h2>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $response = $e->explain(
index => 'my_index', # required
type => 'my_type', # required
id => 123, # required
body => { search } # required
);</pre>
<p>The <code>explain()</code> method explains why the specified document did or did not match a query, and how the relevance score was calculated. For instance:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $response = $e->explain(
index => 'my_index',
type => 'my_type',
id => 123,
body => {
query => {
match => { title => 'Elasticsearch clients' }
}
}
);</pre>
<p>Query string parameters: <code>_source</code>, <code>_source_exclude</code>, <code>_source_include</code>, <code>analyze_wildcard</code>, <code>analyzer</code>, <code>default_operator</code>, <code>df</code>, <code>fields</code>, <code>lenient</code>, <code>lowercase_expanded_terms</code>, <code>parent</code>, <code>preference</code>, <code>q</code>, <code>routing</code>, <code>source</code></p>
<p>See the <a href="http://www.elasticsearch.org/guide/reference/api/explain/">explain docs</a> for more information.</p>
<h2 id="percolate-"><code>percolate()</code></h2>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $results = $e->percolate(
index => 'my_index', # required
type => 'my_type', # required
body => { percolation } # required
);</pre>
<p>Percolation is search inverted: instead of finding docs which match a particular query, it finds queries which match a paticular document, eg for <i>alert-me-when</i> functionality.</p>
<p>The <code>percolate()</code> method runs a percolation request to find the queries matching a particular document. In the <code>body</code> you should pass the <code>_source</code> field of the document under the <code>doc</code> key:</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $results = $e->percolate(
index => 'my_index',
type => 'my_type',
body => {
doc => {
title => 'Elasticsearch rocks'
}
}
);</pre>
<p>Query string parameters: <code>prefer_local</code></p>
<p>See the <a href="http://www.elasticsearch.org/guide/reference/api/percolate/">percolate docs</a> for more information.</p>
<h2 id="suggest-"><code>suggest()</code></h2>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $results = $e->suggest(
index => 'index' | \@indices, # optional
type => 'type' | \@types, # optional
body => { suggest request } # required
);</pre>
<p>The <code>suggest()</code> method is used to run <a href="http://www.elasticsearch.org/guide/reference/api/search/phrase-suggest/">did-you-mean</a> or <a href="http://www.elasticsearch.org/guide/reference/api/search/completion-suggest.html">search-as-you-type</a> suggestion requests, which can also be run as part of a <a href="#search-">"search()"</a> request.</p>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $results = $e->suggest(
index => 'my_index',
type => 'my_type',
body => {
my_suggestions => {
phrase => {
text => 'johnny walker',
field => 'title'
}
}
}
);</pre>
<p>Query string parameters: <code>ignore_indices</code>, <code>preference</code>, <code>routing</code>, <code>source</code></p>
<h2 id="mlt-"><code>mlt()</code></h2>
<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false"> $results = $e->mlt(
index => 'my_index', # required
type => 'my_type', # required
id => 123, # required
body => { search } # optional
);</pre>
<p>The <code>mlt()</code> method runs a <a href="http://www.elasticsearch.org/guide/reference/query-dsl/mlt-query/">more-like-this query</a> to find other documents which are similar to the specified document.</p>
<p>Query string parameters: <code>boost_terms</code>, <code>max_doc_freq</code>, <code>max_query_terms</code>, <code>max_word_len</code>, <code>min_doc_freq</code>, <code>min_term_freq</code>, <code>min_word_len</code>, <code>mlt_fields</code>, <code>percent_terms_to_match</code>, <code>routing</code>, <code>search_from</code>, <code>search_indices</code>, <code>search_query_hint</code>, <code>search_scroll</code>, <code>search_size</code>, <code>search_source</code>, <code>search_type</code>, <code>search_types</code>, <code>stop_words</code></p>
<p>See the <a href="http://www.elasticsearch.org/guide/reference/api/more-like-this/">mlt docs</a> for more information.</p>
</div>
</body>
</html>