Skip to the content.

Multi Search

Client::msearch() sends several searches in one HTTP round trip (_msearch).

<?php
use Zvonchuk\Elastic\Core\MultiSearchRequest;
use Zvonchuk\Elastic\Core\SearchRequest;
use Zvonchuk\Elastic\Query\QueryBuilders;
use Zvonchuk\Elastic\Search\Builder\SearchSourceBuilder;

$source = (new SearchSourceBuilder())->query(QueryBuilders::matchQuery('name', 'Jahangir Asgarov'))->size(50);

$response = $client->msearch((new MultiSearchRequest())
    ->add((new SearchRequest('sanctions'))->source($source))
    ->add((new SearchRequest('pep'))->source($source)));

$sanctions = $response->get(0); // SearchResponse, in the order added
$pep = $response->get(1);

Failures are not empty results

If one of the searches fails (missing index, bad query), get() for it and all() throw a MultiSearchException with its position and the Elasticsearch reason, instead of returning an empty result:

<?php
use Zvonchuk\Elastic\Search\MultiSearchException;

try {
    foreach ($response->all() as $i => $result) {
        // ...
    }
} catch (MultiSearchException $e) {
    // $e->position, $e->error
}

$response->failures(); // [position => error], empty when all succeeded

An empty MultiSearchRequest is not sent.