/**
  * 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;
 }