public function exec(ElasticaRequest $elasticaRequest, array $params)
{
$connection = $this->getConnection();
if ($timeout = $connection->getTimeout()) {
$this->httpAdapter->getConfiguration()->setTimeout($timeout);
}
$httpAdapterRequest = $this->_createHttpAdapterRequest($elasticaRequest, $connection);
$start = microtime(true);
$httpAdapterResponse = $this->httpAdapter->sendRequest($httpAdapterRequest);
$end = microtime(true);
$elasticaResponse = $this->_createElasticaResponse($httpAdapterResponse);
$elasticaResponse->setQueryTime($end - $start);
$elasticaResponse->setTransferInfo(['request_header' => $httpAdapterRequest->getMethod(), 'http_code' => $httpAdapterResponse->getStatusCode()]);
if ($elasticaResponse->hasError()) {
throw new ResponseException($elasticaRequest, $elasticaResponse);
}
if ($elasticaResponse->hasFailedShards()) {
throw new PartialShardFailureException($elasticaRequest, $elasticaResponse);
}
return $elasticaResponse;
}