/** * @param CM_Elasticsearch_Type_Abstract[] $types * @param array|null $data * @return array */ public function query(array $types, array $data = null) { if (!$this->getEnabled()) { return array(); } $this->getServiceManager()->getDebug()->incStats('search', json_encode($data)); $client = $this->getRandomClient(); $search = new Elastica\Search($client); foreach ($types as $type) { $search->addIndex($type->getIndex()); $search->addType($type->getType()); } try { $response = $client->request($search->getPath(), 'GET', $data); } catch (Elastica\Exception\ConnectionException $ex) { foreach ($client->getConnections() as $connection) { $connection->setEnabled(); } throw $ex; } return $response->getData(); }