/** * @param \Elastica\ResultSet $searchResult * @param array $requestParameters * * @return array */ protected function formatSearchResult(ResultSet $searchResult, array $requestParameters) { $products = []; foreach ($searchResult->getResults() as $document) { $products[] = $document->getSource()[PageIndexMap::SEARCH_RESULT_DATA]; } return $products; }
/** * @param \Elastica\ResultSet $resultSet * * @return array */ public function extractProductIdsFromResultSet(ResultSet $resultSet) { $abstractProductIds = []; foreach ($resultSet->getResults() as $result) { $product = $result->getSource(); if (isset($product[PageIndexMap::SEARCH_RESULT_DATA]['id_product_abstract'])) { $abstractProductIds[] = $product[PageIndexMap::SEARCH_RESULT_DATA]['id_product_abstract']; } } return $abstractProductIds; }
public function testPartialFailure() { $client = $this->_getClient(); $index = $client->getIndex('elastica_partial_failure'); $index->create(array('index' => array('number_of_shards' => 5, 'number_of_replicas' => 0)), true); $type = $index->getType('folks'); $type->addDocument(new Document('', array('name' => 'ruflin'))); $type->addDocument(new Document('', array('name' => 'bobrik'))); $type->addDocument(new Document('', array('name' => 'kimchy'))); $index->refresh(); $query = Query::create(array('query' => array('filtered' => array('filter' => array('script' => array('script' => 'doc["undefined"] > 8')))))); try { $index->search($query); $this->fail('PartialShardFailureException should have been thrown'); } catch (PartialShardFailureException $e) { $resultSet = new ResultSet($e->getResponse(), $query); $this->assertEquals(0, count($resultSet->getResults())); } }
/** * Turn the elasticsearch results into a collection of models. * * @param ResultSet $resultSet * @return Collection */ protected function resultsToModels(ResultSet $resultSet) { $results = $resultSet->getResults(); if (!empty($results)) { $groupedResults = $this->groupResultsByType($results); $modelResults = $this->getModelsFromGroupedResults($groupedResults); $collection = $this->newCollection($modelResults); return $collection; // return $collection->sortByDesc(function ($model) { // return $model->score; // }); } return $this->newCollection([]); }
/** * Get a list of the models for the result set * * @param ResultSet $resultSet * @return array */ public function getModels(ResultSet $resultSet) { // Loop through the search hits and return Eloquent models for them $items = []; $hits = $resultSet->getResults(); foreach ($hits as $hit) { $itemArray = $hit->getSource(); $item = new Item(); $item->id = intval($hit->getId()); if (array_key_exists('url', $itemArray)) { $item->itemable = new Link(); $item->itemable->url = $itemArray['url']; $item->itemable->photo = $itemArray['photo']; } else { $item->itemable = new Note(); } $item->value = $itemArray['value']; $item->description = $itemArray['description']; $tagsArray = json_decode($itemArray['tags'], true); $item->tags = []; if ($tagsArray) { $tagsObjArray = []; foreach ($tagsArray as $tag) { $tagObj = new Tag(); $tagObj->name = $tag; $tagsObjArray[] = $tagObj; } $item->tags = $tagsObjArray; } $item->user_id = $itemArray['user_id']; $item->user = new User(); $item->user->id = $itemArray['user_id']; $item->user->user_photo = $itemArray['user_photo']; $items[] = $item; } return $items; }
/** * @param ResultSet $result */ protected function collectHits(ResultSet $result) { $data = $result->getResults(); foreach ($data as $item) { $content = array(); $content['_source'] = $item->getData(); $highlights = $item->getHighlights(); if (!empty($highlights)) { $content['highlight'] = $highlights; } $this->hits[] = $content; } }
/** * Prepares query response. * * @param \Elastica\ResultSet $response * @return array */ protected function _prepareQueryResponse($response) { /* @var $response \Elastica\ResultSet */ if (!$response instanceof \Elastica\ResultSet || $response->getResponse()->hasError() || !$response->count()) { return array(); } $this->_lastNumFound = (int) $response->getTotalHits(); $result = array(); foreach ($response->getResults() as $doc) { $result[] = $this->_toArray($doc->getSource()); } return $result; }
protected function buildInsertQuery(\Elastica\ResultSet $resultSet, $queryId) { $writeAdapter = $this->_getWriteAdapter(); $query = 'INSERT'; $query = sprintf('%s INTO %s', $query, $writeAdapter->quoteIdentifier($this->getTable('catalogsearch/result'))); $fields = ['query_id', 'product_id', 'relevance']; $columns = array_map(array($writeAdapter, 'quoteIdentifier'), $fields); $columns = implode(',', $columns); $query .= ' (' . $columns . ')'; $query .= ' VALUES'; $valueRows = []; foreach ($resultSet->getResults() as $result) { $productId = $result->getData()['entity_id'][0]; $values = [(int) $queryId, (int) $productId, (double) $result->getScore()]; $valueRows[] = '(' . implode(', ', $values) . ')'; } $query .= ' ' . implode(', ', $valueRows); $update = array(); foreach ($fields as $field) { $update[] = sprintf('%1$s = VALUES(%1$s)', $writeAdapter->quoteIdentifier($field)); } if ($update) { $query = sprintf('%s ON DUPLICATE KEY UPDATE %s', $query, join(', ', $update)); } return $query; }