The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
<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-&gt;new(
        client =&gt; &#39;Direct&#39;          # default
    );</pre>

<p>Index a doc:</p>

<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false">    $e-&gt;index(
        index   =&gt; &#39;my_index&#39;,
        type    =&gt; &#39;blog_post&#39;,
        id      =&gt; 123,
        body    =&gt; {
            title   =&gt; &quot;Elasticsearch clients&quot;,
            content =&gt; &quot;Interesting content...&quot;,
            date    =&gt; &quot;2013-09-23&quot;
        }
    );</pre>

<p>Get a doc:</p>

<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false">    $e-&gt;get(
        index   =&gt; &#39;my_index&#39;,
        type    =&gt; &#39;my_type&#39;,
        id      =&gt; 123
    );</pre>

<p>Search for docs:</p>

<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false">    $results = $e-&gt;search(
        index   =&gt; &#39;my_index&#39;,
        body    =&gt; {
            query =&gt; {
                match =&gt; {
                    title =&gt; &quot;elasticsearch&quot;
                }
            }
        }
    );</pre>

<p>Index-level requests:</p>

<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false">    $e-&gt;indices-&gt;create( index =&gt; &#39;my_index&#39; );
    $e-&gt;indices-&gt;delete( index =&gt; &#39;my_index&#39; )</pre>

<p>Cluster-level requests:</p>

<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false">    $state = $e-&gt;cluster-&gt;state;
    $stats = $e-&gt;cluster-&gt;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-&gt;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-&gt;search( size =&gt; 10 );
    $e-&gt;search({size =&gt; 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-&gt;search( index =&gt; &#39;my_index&#39;, type =&gt; &#39;my_type&#39; );</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-&gt;search( path =&gt; &#39;/my_index/my_type&#39; );</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-&gt;search( size =&gt; 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-&gt;search( size =&gt; 10, params =&gt; { from =&gt; 5, size =&gt; 5 })</pre>

<p>would result in this query string:</p>

<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false">    ?from=5&amp;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-&gt;search(
        body =&gt; {
            query =&gt; {...}
        }
    );</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-&gt;analyze( body =&gt; &quot;The quick brown fox&quot;);</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-&gt;indices-&gt;delete(
        index  =&gt; &#39;my_index&#39;,
        ignore =&gt; 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-&gt;indices-&gt;delete(
        index  =&gt; &#39;my_index&#39;,
        ignore =&gt; [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-&gt;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-&gt;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-&gt;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-&gt;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-&gt;index(
        index   =&gt; &#39;index_name&#39;,        # required
        type    =&gt; &#39;type_name&#39;,         # required
        id      =&gt; &#39;doc_id&#39;,            # optional, otherwise auto-generated

        body    =&gt; { 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-&gt;create(
        index   =&gt; &#39;index_name&#39;,        # required
        type    =&gt; &#39;type_name&#39;,         # required
        id      =&gt; &#39;doc_id&#39;,            # optional, otherwise auto-generated

        body    =&gt; { document }         # required
    );</pre>

<p>The <code>create()</code> method works exactly like the <a href="#index-">&quot;index()&quot;</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-&gt;get(
        index   =&gt; &#39;index_name&#39;,        # required
        type    =&gt; &#39;type_name&#39;,         # required
        id      =&gt; &#39;doc_id&#39;,            # 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-&gt;get_source(
        index   =&gt; &#39;index_name&#39;,        # required
        type    =&gt; &#39;type_name&#39;,         # required
        id      =&gt; &#39;doc_id&#39;,            # required
    );</pre>

<p>The <code>get_source()</code> method works just like the <a href="#get-">&quot;get()&quot;</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-">&quot;index()&quot;</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-&gt;exists(
        index   =&gt; &#39;index_name&#39;,        # required
        type    =&gt; &#39;type_name&#39;,         # required
        id      =&gt; &#39;doc_id&#39;,            # 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&#39;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-&gt;delete(
        index   =&gt; &#39;index_name&#39;,        # required
        type    =&gt; &#39;type_name&#39;,         # required
        id      =&gt; &#39;doc_id&#39;,            # 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-&gt;update(
        index   =&gt; &#39;index_name&#39;,        # required
        type    =&gt; &#39;type_name&#39;,         # required
        id      =&gt; &#39;doc_id&#39;,            # required

        body    =&gt; { 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-&gt;update(
        ...,
        body =&gt; {
            doc =&gt; { new_field =&gt; &#39;new_value&#39;},
        }
    );</pre>

</li>
<li><p>or with a script:</p>

<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false">    $response = $e-&gt;update(
        ...,
        body =&gt; {
            script =&gt; &quot;ctx._source.counter += incr&quot;,
            params =&gt; { incr =&gt; 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-&gt;bulk(
        index   =&gt; &#39;index_name&#39;,        # required if type specified
        type    =&gt; &#39;type_name&#39;,         # optional

        body    =&gt; [ 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-">&quot;index()&quot;</a>, <a href="#create-">&quot;create()&quot;</a>, <a href="#delete-">&quot;delete()&quot;</a> or <a href="#update-">&quot;update()&quot;</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 =&gt; { _index =&gt; &#39;index&#39;, _type =&gt; &#39;type&#39;, _id =&gt; 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 =&gt; { _index =&gt; &#39;index&#39;, _type =&gt; &#39;type&#39;, _id =&gt; 123 }},
    { title =&gt; &quot;A newly created document&quot; }</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 =&gt; { _index =&gt; &#39;index&#39;, _type =&gt; &#39;type&#39;, _id =&gt; 123 }},
    { script =&gt; &quot;ctx._source.counter+=1&quot; }</pre>

<p>Each action can include the same parameters that you would pass to the equivalent <a href="#index-">&quot;index()&quot;</a>, <a href="#create-">&quot;create()&quot;</a>, <a href="#delete-">&quot;delete()&quot;</a> or <a href="#update-">&quot;update()&quot;</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-&gt;bulk(
        index   =&gt; &#39;index_name&#39;,        # default index name
        type    =&gt; &#39;type_name&#39;,         # default type name
        body    =&gt; [

            # create action
            { create =&gt; {
                _index =&gt; &#39;not_the_default_index&#39;,
                _type  =&gt; &#39;not_the_default_type&#39;,
                _id    =&gt; 123
            }},
            { title =&gt; &#39;Foo&#39; },

            # index action
            { index =&gt; { _id =&gt; 124 }},
            { title =&gt; &#39;Foo&#39; },

            # delete action
            { delete =&gt; { _id =&gt; 125 }},

            # update action
            { update =&gt; { _id =&gt; 126 }},
            { script =&gt; &quot;ctx._source.counter+1&quot; }
        ]
    );</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-&gt;mget(
        index   =&gt; &#39;default_index&#39;,     # optional, required when type specified
        type    =&gt; &#39;default_type&#39;,      # optional

        body    =&gt; { 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-&gt;mget(
        index   =&gt; &#39;default_index&#39;,
        type    =&gt; &#39;default_type&#39;,
        body    =&gt; {
            docs =&gt; [
                { _id =&gt; 1},
                { _id =&gt; 2, _type =&gt; &#39;not_the_default_type&#39; }
            ]
        }
    );</pre>

<p>You can also pass any of the other parameters that the <a href="#get-">&quot;get()&quot;</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-&gt;mget(
        index   =&gt; &#39;default_index&#39;,
        type    =&gt; &#39;default_type&#39;,
        body    =&gt; {
            ids =&gt; [ 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-&gt;delete_by_query(
        index =&gt; &#39;index&#39; | \@indices,   # optional
        type  =&gt; &#39;type&#39;  | \@types,     # optional

        body  =&gt; { 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-&gt;delete_by_query(
        body  =&gt; {
            range =&gt; {
                date =&gt; {
                    gte =&gt; &#39;2012-01-01&#39;,
                    lt  =&gt; &#39;2013-01-01&#39;
                }
            }
        }
    );</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-&gt;search(
        index   =&gt; &#39;index&#39; | \@indices,     # optional
        type    =&gt; &#39;type&#39;  | \@types,       # optional

        body    =&gt; { 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-&gt;search( q =&gt; &#39;title:(elasticsearch clients)&#39;);</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-&gt;search(
        body =&gt; {
            query =&gt; {
                match =&gt; { title =&gt; &#39;Elasticsearch clients&#39;}
            }
        }
    );</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-&gt;count(
        index   =&gt; &#39;index&#39; | \@indices,     # optional
        type    =&gt; &#39;type&#39;  | \@types,       # optional

        body    =&gt; { 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-&gt;count(
        body =&gt; { match =&gt; { title =&gt; &#39;Elasticsearch clients&#39; }}
    );</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-&gt;scroll(
        scroll      =&gt; &#39;1m&#39;,
        scroll_id   =&gt; $id
    );</pre>

<p>When a <a href="#search-">&quot;search()&quot;</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-&gt;clear_scroll(
        scroll_id =&gt; $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-&gt;msearch(
        index   =&gt; &#39;default_index&#39; | \@indices,     # optional
        type    =&gt; &#39;default_type&#39;  | \@types,       # optional

        body    =&gt; [ 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-">&quot;bulk()&quot;</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&#39;d specify in the <code>body</code> of a <a href="#search-">&quot;search()&quot;</a> request). For instance:</p>

<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false">    $results = $e-&gt;msearch(
        index   =&gt; &#39;default_index&#39;,
        type    =&gt; [&#39;default_type_1&#39;, &#39;default_type_2&#39;],
        body =&gt; [
            # uses defaults
            {},
            { query =&gt; { match_all =&gt; {} }},

            # uses a custom index
            { index =&gt; &#39;not_the_default_index&#39; },
            { query =&gt; { match_all =&gt; {} }}
        ]
    );</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-&gt;explain(
        index   =&gt; &#39;my_index&#39;,  # required
        type    =&gt; &#39;my_type&#39;,   # required
        id      =&gt; 123,         # required

        body    =&gt; { 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-&gt;explain(
        index   =&gt; &#39;my_index&#39;,
        type    =&gt; &#39;my_type&#39;,
        id      =&gt; 123,
        body    =&gt; {
            query =&gt; {
                match =&gt; { title =&gt; &#39;Elasticsearch clients&#39; }
            }
        }
    );</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-&gt;percolate(
        index   =&gt; &#39;my_index&#39;,      # required
        type    =&gt; &#39;my_type&#39;,       # required

        body    =&gt; { 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-&gt;percolate(
        index   =&gt; &#39;my_index&#39;,
        type    =&gt; &#39;my_type&#39;,
        body    =&gt; {
            doc =&gt; {
                title =&gt; &#39;Elasticsearch rocks&#39;
            }
        }
    );</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-&gt;suggest(
        index   =&gt; &#39;index&#39; | \@indices,     # optional
        type    =&gt; &#39;type&#39;  | \@types,       # optional

        body    =&gt; { 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-">&quot;search()&quot;</a> request.</p>

<pre class="brush: pl; class-name: 'highlight'; toolbar: false; gutter: false">    $results = $e-&gt;suggest(
        index   =&gt; &#39;my_index&#39;,
        type    =&gt; &#39;my_type&#39;,
        body    =&gt; {
            my_suggestions =&gt; {
                phrase  =&gt; {
                    text    =&gt; &#39;johnny walker&#39;,
                    field   =&gt; &#39;title&#39;
                }
            }
        }
    );</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-&gt;mlt(
        index   =&gt; &#39;my_index&#39;,  # required
        type    =&gt; &#39;my_type&#39;,   # required
        id      =&gt; 123,         # required

        body    =&gt; { 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>