本文整理汇总了PHP中Elastica\Response类的典型用法代码示例。如果您正苦于以下问题:PHP Response类的具体用法?PHP Response怎么用?PHP Response使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Response类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: testExists
/**
* @group unit
*/
public function testExists()
{
$name = 'index_template1';
$response = new Response('');
$response->setTransferInfo(array('http_code' => 200));
/** @var \PHPUnit_Framework_MockObject_MockObject|Client $clientMock */
$clientMock = $this->getMock('\\Elastica\\Client', array('request'));
$clientMock->expects($this->once())->method('request')->with('/_template/' . $name, Request::HEAD, array(), array())->willReturn($response);
$indexTemplate = new IndexTemplate($clientMock, $name);
$this->assertTrue($indexTemplate->exists());
}
示例2: buildResults
/**
* Builds individual result objects.
*
* @param Response $response
*
* @return Result[]
*/
private function buildResults(Response $response)
{
$data = $response->getData();
$results = [];
if (!isset($data['hits']['hits'])) {
return $results;
}
foreach ($data['hits']['hits'] as $hit) {
$results[] = new Result($hit);
}
return $results;
}
示例3: exec
/**
* Makes calls to the elasticsearch server.
*
* @param \Elastica\Request $request
* @param array $params Host, Port, ...
*
* @throws \Elastica\Exception\ResponseException
* @throws \Elastica\Exception\InvalidException
*
* @return \Elastica\Response Response object
*/
public function exec(Request $request, array $params)
{
$memcache = new \Memcache();
$memcache->connect($this->getConnection()->getHost(), $this->getConnection()->getPort());
$data = $request->getData();
$content = '';
if (!empty($data) || '0' === $data) {
if (is_array($data)) {
$content = JSON::stringify($data);
} else {
$content = $data;
}
// Escaping of / not necessary. Causes problems in base64 encoding of files
$content = str_replace('\\/', '/', $content);
}
$responseString = '';
$start = microtime(true);
switch ($request->getMethod()) {
case Request::POST:
case Request::PUT:
$key = $request->getPath();
$this->_checkKeyLength($key);
$memcache->set($key, $content);
break;
case Request::GET:
$key = $request->getPath() . '?source=' . $content;
$this->_checkKeyLength($key);
$responseString = $memcache->get($key);
break;
case Request::DELETE:
$key = $request->getPath() . '?source=' . $content;
$this->_checkKeyLength($key);
$responseString = $memcache->delete($key);
break;
default:
case Request::HEAD:
throw new InvalidException('Method ' . $request->getMethod() . ' is not supported in memcache transport');
}
$end = microtime(true);
$response = new Response($responseString);
if (\Elastica\Util::debugEnabled()) {
$response->setQueryTime($end - $start);
}
if ($response->hasError()) {
throw new ResponseException($request, $response);
}
if ($response->hasFailedShards()) {
throw new PartialShardFailureException($request, $response);
}
return $response;
}
示例4: exec
/**
* Makes calls to the elasticsearch server
*
* All calls that are made to the server are done through this function
*
* @param \Elastica\Request $request
* @param array $params Host, Port, ...
* @throws \Elastica\Exception\ConnectionException
* @throws \Elastica\Exception\ResponseException
* @throws \Elastica\Exception\Connection\HttpException
* @return \Elastica\Response Response object
*/
public function exec(Request $request, array $params)
{
$connection = $this->getConnection();
try {
$client = $this->_getGuzzleClient($this->_getBaseUrl($connection), $connection->isPersistent());
$options = array();
if ($connection->getTimeout()) {
$options['timeout'] = $connection->getTimeout();
}
if ($connection->getProxy()) {
$options['proxy'] = $connection->getProxy();
}
$req = $client->createRequest($request->getMethod(), $this->_getActionPath($request), $options);
$req->setHeaders($connection->hasConfig('headers') ?: array());
$data = $request->getData();
if (isset($data) && !empty($data)) {
if ($req->getMethod() == Request::GET) {
$req->setMethod(Request::POST);
}
if ($this->hasParam('postWithRequestBody') && $this->getParam('postWithRequestBody') == true) {
$request->setMethod(Request::POST);
$req->setMethod(Request::POST);
}
if (is_array($data)) {
$content = JSON::stringify($data, 'JSON_ELASTICSEARCH');
} else {
$content = $data;
}
$req->setBody(Stream::factory($content));
}
$start = microtime(true);
$res = $client->send($req);
$end = microtime(true);
$response = new Response((string) $res->getBody(), $res->getStatusCode());
if (defined('DEBUG') && DEBUG) {
$response->setQueryTime($end - $start);
}
$response->setTransferInfo(array('request_header' => $request->getMethod(), 'http_code' => $res->getStatusCode()));
if ($response->hasError()) {
throw new ResponseException($request, $response);
}
if ($response->hasFailedShards()) {
throw new PartialShardFailureException($request, $response);
}
return $response;
} catch (ClientException $e) {
// ignore 4xx errors
} catch (TransferException $e) {
throw new GuzzleException($e, $request, new Response($e->getMessage()));
}
}
示例5: buildResultSets
/**
* @param Response $response
* @param BaseSearch[] $searches
*
* @return \Elastica\ResultSet[]
*/
private function buildResultSets(Response $response, $searches)
{
$data = $response->getData();
if (!isset($data['responses']) || !is_array($data['responses'])) {
return [];
}
$resultSets = [];
reset($searches);
foreach ($data['responses'] as $responseData) {
list($key, $search) = each($searches);
$resultSets[$key] = $this->buildResultSet(new Response($responseData), $search);
}
return $resultSets;
}
示例6: _init
/**
* Loads all data into the results object (initialisation)
*
* @param \Elastica\Response $response Response object
*/
protected function _init(Response $response)
{
$this->_response = $response;
$result = $response->getData();
$this->_totalHits = isset($result['hits']['total']) ? $result['hits']['total'] : 0;
$this->_maxScore = isset($result['hits']['max_score']) ? $result['hits']['max_score'] : 0;
$this->_took = isset($result['took']) ? $result['took'] : 0;
$this->_timedOut = !empty($result['timed_out']);
if (isset($result['hits']['hits'])) {
foreach ($result['hits']['hits'] as $hit) {
$this->_results[] = new Result($hit);
}
}
}
示例7: _init
/**
* @param \Elastica\Response $response
* @param array|\Elastica\Search[] $searches
* @throws \Elastica\Exception\InvalidException
*/
protected function _init(Response $response, array $searches)
{
$this->_response = $response;
$responseData = $response->getData();
if (isset($responseData['responses']) && is_array($responseData['responses'])) {
foreach ($responseData['responses'] as $key => $responseData) {
if (!isset($searches[$key])) {
throw new InvalidException('No result found for search #' . $key);
} elseif (!$searches[$key] instanceof BaseSearch) {
throw new InvalidException('Invalid object for search #' . $key . ' provided. Should be Elastica\\Search');
}
$search = $searches[$key];
$query = $search->getQuery();
$response = new Response($responseData);
$this->_resultSets[] = new BaseResultSet($response, $query);
}
}
}
示例8: exec
/**
* Makes calls to the elasticsearch server
*
* @param \Elastica\Request $request
* @param array $params Host, Port, ...
* @throws \Elastica\Exception\ResponseException
* @throws \Elastica\Exception\InvalidException
* @return \Elastica\Response Response object
*/
public function exec(Request $request, array $params)
{
$memcache = new \Memcache();
$memcache->connect($this->getConnection()->getHost(), $this->getConnection()->getPort());
// Finds right function name
$function = strtolower($request->getMethod());
$data = $request->getData();
$content = '';
if (!empty($data)) {
if (is_array($data)) {
$content = json_encode($data);
} else {
$content = $data;
}
// Escaping of / not necessary. Causes problems in base64 encoding of files
$content = str_replace('\\/', '/', $content);
}
$responseString = '';
switch ($function) {
case 'post':
case 'put':
$memcache->set($request->getPath(), $content);
break;
case 'get':
$responseString = $memcache->get($request->getPath() . '?source=' . $content);
echo $responseString . PHP_EOL;
break;
case 'delete':
break;
default:
throw new InvalidException('Method ' . $function . ' is not supported in memcache transport');
}
$response = new Response($responseString);
if ($response->hasError()) {
throw new ResponseException($request, $response);
}
if ($response->hasFailedShards()) {
throw new PartialShardFailureException($request, $response);
}
return $response;
}
示例9: _log
/**
* logging.
*
* @deprecated Overwriting Client->_log is deprecated. Handle logging functionality by using a custom LoggerInterface.
*
* @param mixed $context
*/
protected function _log($context)
{
if ($context instanceof ConnectionException) {
$this->_logger->error('Elastica Request Failure', ['exception' => $context, 'request' => $context->getRequest()->toArray(), 'retry' => $this->hasConnection()]);
return;
}
if ($context instanceof Request) {
$this->_logger->debug('Elastica Request', ['request' => $context->toArray(), 'response' => $this->_lastResponse ? $this->_lastResponse->getData() : null, 'responseStatus' => $this->_lastResponse ? $this->_lastResponse->getStatus() : null]);
return;
}
$this->_logger->debug('Elastica Request', ['message' => $context]);
}
示例10: _init
/**
* Loads all data into the results object (initialisation)
*
* @param \Elastica\Response $response Response object
*/
protected function _init(Response $response)
{
$this->_response = $response;
$result = $response->getData();
$this->_totalHits = isset($result['hits']['total']) ? $result['hits']['total'] : 0;
$this->_maxScore = isset($result['hits']['max_score']) ? $result['hits']['max_score'] : 0;
$this->_took = isset($result['took']) ? $result['took'] : 0;
$this->_timedOut = !empty($result['timed_out']);
if (isset($result['hits']['hits'])) {
foreach ($result['hits']['hits'] as $hit) {
$this->_results[] = new Result($hit);
}
}
foreach ($result as $key => $value) {
if ($key != '_shards') {
if (isset($value[0]['options']) && count($value[0]['options']) > 0) {
$this->_suggests[$key] = $value[0];
}
}
}
}
示例11: exec
/**
* Makes calls to the elasticsearch server.
*
* All calls that are made to the server are done through this function
*
* @param \Elastica\Request $request
* @param array $params Host, Port, ...
*
* @throws \Elastica\Exception\ConnectionException
* @throws \Elastica\Exception\ResponseException
* @throws \Elastica\Exception\Connection\HttpException
*
* @return \Elastica\Response Response object
*/
public function exec(Request $request, array $params)
{
$connection = $this->getConnection();
$client = $this->_getGuzzleClient($this->_getBaseUrl($connection), $connection->isPersistent());
$options = array('exceptions' => false);
if ($connection->getTimeout()) {
$options['timeout'] = $connection->getTimeout();
}
$proxy = $connection->getProxy();
// See: https://github.com/facebook/hhvm/issues/4875
if (is_null($proxy) && defined('HHVM_VERSION')) {
$proxy = getenv('http_proxy') ?: null;
}
if (!is_null($proxy)) {
$options['proxy'] = $proxy;
}
$req = $this->_createPsr7Request($request, $connection);
try {
$start = microtime(true);
$res = $client->send($req, $options);
$end = microtime(true);
} catch (TransferException $ex) {
throw new GuzzleException($ex, $request, new Response($ex->getMessage()));
}
$response = new Response((string) $res->getBody(), $res->getStatusCode());
$response->setQueryTime($end - $start);
if ($connection->hasConfig('bigintConversion')) {
$response->setJsonBigintConversion($connection->getConfig('bigintConversion'));
}
$response->setTransferInfo(array('request_header' => $request->getMethod(), 'http_code' => $res->getStatusCode()));
if ($response->hasError()) {
throw new ResponseException($request, $response);
}
if ($response->hasFailedShards()) {
throw new PartialShardFailureException($request, $response);
}
return $response;
}
示例12: testDecodeResponseWithBigIntSetToTrue
/**
* @group unit
*/
public function testDecodeResponseWithBigIntSetToTrue()
{
$response = new Response(json_encode(array('took' => 213, 'items' => array(array('index' => array('_index' => 'rohlik', '_type' => 'grocery', '_id' => '707891', '_version' => 4, 'status' => 200)), array('index' => array('_index' => 'rohlik', '_type' => 'grocery', '_id' => '707893', '_version' => 4, 'status' => 200))))));
$response->setJsonBigintConversion(true);
$this->assertTrue(is_array($response->getData()));
}
示例13: exec
/**
* Makes calls to the elasticsearch server
*
* All calls that are made to the server are done through this function
*
* @param \Elastica\Request $request
* @param array $params Host, Port, ...
* @throws \Elastica\Exception\ConnectionException
* @throws \Elastica\Exception\ResponseException
* @throws \Elastica\Exception\Connection\HttpException
* @return \Elastica\Response Response object
*/
public function exec(Request $request, array $params)
{
$connection = $this->getConnection();
$conn = $this->_getConnection($connection->isPersistent());
// If url is set, url is taken. Otherwise port, host and path
$url = $connection->hasConfig('url') ? $connection->getConfig('url') : '';
if (!empty($url)) {
$baseUri = $url;
} else {
$baseUri = $this->_scheme . '://' . $connection->getHost() . ':' . $connection->getPort() . '/' . $connection->getPath();
}
$baseUri .= $request->getPath();
$query = $request->getQuery();
if (!empty($query)) {
$baseUri .= '?' . http_build_query($query);
}
curl_setopt($conn, CURLOPT_URL, $baseUri);
curl_setopt($conn, CURLOPT_TIMEOUT, $connection->getTimeout());
curl_setopt($conn, CURLOPT_FORBID_REUSE, 0);
$proxy = $connection->getProxy();
if (!is_null($proxy)) {
curl_setopt($conn, CURLOPT_PROXY, $proxy);
}
$this->_setupCurl($conn);
$headersConfig = $connection->hasConfig('headers') ? $connection->getConfig('headers') : array();
if (!empty($headersConfig)) {
$headers = array();
while (list($header, $headerValue) = each($headersConfig)) {
array_push($headers, $header . ': ' . $headerValue);
}
curl_setopt($conn, CURLOPT_HTTPHEADER, $headers);
}
// TODO: REFACTOR
$data = $request->getData();
$httpMethod = $request->getMethod();
if (!empty($data) || '0' === $data) {
if ($this->hasParam('postWithRequestBody') && $this->getParam('postWithRequestBody') == true) {
$httpMethod = Request::POST;
}
if (is_array($data)) {
$content = JSON::stringify($data, 'JSON_ELASTICSEARCH');
} else {
$content = $data;
}
// Escaping of / not necessary. Causes problems in base64 encoding of files
$content = str_replace('\\/', '/', $content);
curl_setopt($conn, CURLOPT_POSTFIELDS, $content);
} else {
curl_setopt($conn, CURLOPT_POSTFIELDS, '');
}
curl_setopt($conn, CURLOPT_NOBODY, $httpMethod == 'HEAD');
curl_setopt($conn, CURLOPT_CUSTOMREQUEST, $httpMethod);
if (defined('DEBUG') && DEBUG) {
// Track request headers when in debug mode
curl_setopt($conn, CURLINFO_HEADER_OUT, true);
}
$start = microtime(true);
// cURL opt returntransfer leaks memory, therefore OB instead.
ob_start();
curl_exec($conn);
$responseString = ob_get_clean();
$end = microtime(true);
// Checks if error exists
$errorNumber = curl_errno($conn);
$response = new Response($responseString, curl_getinfo($this->_getConnection(), CURLINFO_HTTP_CODE));
if (defined('DEBUG') && DEBUG) {
$response->setQueryTime($end - $start);
}
$response->setTransferInfo(curl_getinfo($conn));
if ($response->hasError()) {
throw new ResponseException($request, $response);
}
if ($response->hasFailedShards()) {
throw new PartialShardFailureException($request, $response);
}
if ($errorNumber > 0) {
throw new HttpException($errorNumber, $request, $response);
}
return $response;
}
示例14: _populateDocumentFieldsFromResponse
/**
* @param \Elastica\Response $response
* @param \Elastica\Document $document
* @param string $fields Array of field names to be populated or '_source' if whole document data should be updated
*/
protected function _populateDocumentFieldsFromResponse(Response $response, Document $document, $fields)
{
$responseData = $response->getData();
if ('_source' == $fields) {
if (isset($responseData['get']['_source']) && is_array($responseData['get']['_source'])) {
$document->setData($responseData['get']['_source']);
}
} else {
$keys = explode(',', $fields);
$data = $document->getData();
foreach ($keys as $key) {
if (isset($responseData['get']['fields'][$key])) {
$data[$key] = $responseData['get']['fields'][$key];
} elseif (isset($data[$key])) {
unset($data[$key]);
}
}
$document->setData($data);
}
}
示例15: postProcessSuggest
/**
* merge top level multi-queries and resolve returned pageIds into Title objects.
*
* WARNING: experimental API
*
* @param string $query the user query
* @param \Elastica\Response $response Response from elasticsearch _suggest api
* @param array $profiles the suggestion profiles
* @param int $limit Maximum suggestions to return, -1 for unlimited
* @return SearchSuggestionSet a set of Suggestions
*/
protected function postProcessSuggest(\Elastica\Response $response, $profiles, $limit = -1)
{
$this->logContext['elasticTookMs'] = intval($response->getQueryTime() * 1000);
$data = $response->getData();
unset($data['_shards']);
$suggestions = array();
foreach ($data as $name => $results) {
$discount = $profiles[$name]['discount'];
foreach ($results as $suggested) {
foreach ($suggested['options'] as $suggest) {
$output = SuggestBuilder::decodeOutput($suggest['text']);
if ($output === null) {
// Ignore broken output
continue;
}
$pageId = $output['id'];
$type = $output['type'];
$score = $discount * $suggest['score'];
if (!isset($suggestions[$pageId]) || $score > $suggestions[$pageId]->getScore()) {
$suggestion = new SearchSuggestion($score, null, null, $pageId);
// If it's a title suggestion we have the text
if ($type === SuggestBuilder::TITLE_SUGGESTION) {
$suggestion->setText($output['text']);
}
$suggestions[$pageId] = $suggestion;
}
}
}
}
// simply sort by existing scores
uasort($suggestions, function ($a, $b) {
return $b->getScore() - $a->getScore();
});
$this->logContext['hitsTotal'] = count($suggestions);
if ($limit > 0) {
$suggestions = array_slice($suggestions, 0, $limit, true);
}
$this->logContext['hitsReturned'] = count($suggestions);
$this->logContext['hitsOffset'] = 0;
// we must fetch redirect data for redirect suggestions
$missingText = array();
foreach ($suggestions as $id => $suggestion) {
if ($suggestion->getText() === null) {
$missingText[] = $id;
}
}
if (!empty($missingText)) {
// Experimental.
//
// Second pass query to fetch redirects.
// It's not clear if it's the best option, this will slowdown the whole query
// when we hit a redirect suggestion.
// Other option would be to encode redirects as a payload resulting in a
// very big index...
// XXX: we support only the content index
$type = $this->connection->getPageType($this->indexBaseName, Connection::CONTENT_INDEX_TYPE);
// NOTE: we are already in a poolCounterWork
// Multi get is not supported by elastica
$redirResponse = null;
try {
$redirResponse = $type->request('_mget', 'GET', array('ids' => $missingText), array('_source_include' => 'redirect'));
if ($redirResponse->isOk()) {
$this->logContext['elasticTook2PassMs'] = intval($redirResponse->getQueryTime() * 1000);
$docs = $redirResponse->getData();
foreach ($docs['docs'] as $doc) {
if (empty($doc['_source']['redirect'])) {
continue;
}
// We use the original query, we should maybe use the variant that generated this result?
$text = Util::chooseBestRedirect($this->term, $doc['_source']['redirect']);
if (!empty($suggestions[$doc['_id']])) {
$suggestions[$doc['_id']]->setText($text);
}
}
} else {
LoggerFactory::getInstance('CirrusSearch')->warning('Unable to fetch redirects for suggestion {query} with results {ids} : {error}', array('query' => $this->term, 'ids' => serialize($missingText), 'error' => $redirResponse->getError()));
}
} catch (\Elastica\Exception\ExceptionInterface $e) {
LoggerFactory::getInstance('CirrusSearch')->warning('Unable to fetch redirects for suggestion {query} with results {ids} : {error}', array('query' => $this->term, 'ids' => serialize($missingText), 'error' => $this->extractMessage($e)));
}
}
return new SearchSuggestionSet(array_filter($suggestions, function ($suggestion) {
// text should be not empty for suggestions
return $suggestion->getText() != null;
}));
}