/** * Accepts a Solarium select result and a search config. * If not the root search result set, you should provide the parent and metaposition. * @param Solarium_Result_Select $result * @param WikiaSearchConfig $searchConfig * @param WikiaSearchResultSet $parent * @param int $metaposition */ public function __construct(Solarium_Result_Select $result, WikiaSearchConfig $searchConfig, $parent = null, $metaposition = null) { wfProfileIn(__METHOD__); parent::__construct(); $this->searchResultObject = $result; $this->searchConfig = $searchConfig; $this->setQuery($searchConfig->getQuery(WikiaSearchConfig::QUERY_ENCODED)); if ($result instanceof Solarium_Result_Select_Empty) { return; } if ($parent === null && $this->searchConfig->getGroupResults()) { $this->setResultGroupings($result, $searchConfig); $this->setResultsFound($this->getHostGrouping()->getMatches()); } else { $this->parent = $parent; $this->metaposition = $metaposition; $this->highlightingObject = $result->getHighlighting(); $this->setResultsStart($result->getStart())->setQueryTime($result->getQueryTime()); if ($this->parent !== null && $this->metaposition !== null) { $this->prepareChildResultSet(); } else { // default behavior for an ungrouped search result set $this->prependArticleMatchIfExists()->setResults($this->searchResultObject->getDocuments())->setResultsFound($this->resultsFound + $this->searchResultObject->getNumFound()); } } wfProfileOut(__METHOD__); }
/** * perform search * @param WikiaSearchConfig $searchConfig * @return WikiaSearchResultSet */ public function doSearch(WikiaSearchConfig $searchConfig) { wfProfileIn(__METHOD__); if ($searchConfig->getGroupResults() == true) { $searchConfig->setLength(self::GROUP_RESULTS_GROUPINGS_LIMIT)->setIsInterWiki(true)->setStart((int) $searchConfig->getLength() * ((int) $searchConfig->getPage() - 1)); } else { $searchConfig->setStart(($searchConfig->getPage() - 1) * $searchConfig->getLength()); } try { $result = $this->client->select($this->getSelectQuery($searchConfig)); } catch (Exception $e) { Wikia::log(__METHOD__, 'Querying Solr First Time', $e); $searchConfig->setSkipBoostFunctions(true); try { $result = $this->client->select($this->getSelectQuery($searchConfig)); } catch (Exception $e) { Wikia::log(__METHOD__, 'Querying Solr With No Boost Functions', $e); $result = F::build('Solarium_Result_Select_Empty'); } } $results = F::build('WikiaSearchResultSet', array($result, $searchConfig)); $searchConfig->setResults($results)->setResultsFound($results->getResultsFound()); if ($searchConfig->getPage() == 1) { $resultCount = $results->getResultsFound(); Track::event(!empty($resultCount) ? 'search_start' : 'search_start_nomatch', array('sterm' => $searchConfig->getQuery(), 'rver' => self::RELEVANCY_FUNCTION_ID, 'stype' => $searchConfig->getCityId() == 0 ? 'inter' : 'intra')); } wfProfileOut(__METHOD__); return $results; }