/**
  * 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__);
 }
 /**
  * Utilizes Solr's MoreLikeThis component to return similar pages
  * @see    WikiaSearchTest::testMoreLikeThis
  * @param  WikiaSearchConfig $searchConfig
  * @return WikiaSearchResultSet
  */
 private function moreLikeThis(WikiaSearchConfig $searchConfig)
 {
     $query = $searchConfig->getQuery(WikiaSearchConfig::QUERY_RAW);
     $streamBody = $searchConfig->getStreamBody();
     $streamUrl = $searchConfig->getStreamUrl();
     if (!($query || $streamBody || $streamUrl)) {
         throw new Exception("A query, url, or stream is required.");
     }
     $mlt = $this->client->createMoreLikeThis();
     $mlt->setMltFields(implode(',', $searchConfig->getMltFields()))->setFields($searchConfig->getRequestedFields())->addParam('mlt.match.include', 'false')->setStart($searchConfig->getStart())->setRows($searchConfig->getRows())->setDocumentClass('WikiaSearchResult');
     if ($searchConfig->getInterestingTerms() == 'list') {
         $mlt->setInterestingTerms('list');
     }
     if ($searchConfig->getMltFilterQuery()) {
         $mlt->addFilterQuery(array('query' => $searchConfig->getMltFilterQuery(), 'key' => 'mltfilterquery'));
     }
     if ($query !== null) {
         $mlt->setQuery($query);
     } else {
         if ($streamBody) {
             $mlt->addParam('stream.body', $streamBody);
         } else {
             if ($streamUrl) {
                 $mlt->addParam('stream.url', $streamUrl);
             }
         }
     }
     try {
         $mltResult = $this->client->moreLikeThis($mlt);
     } catch (Exception $e) {
         $mltResult = F::build('Solarium_Result_Select_Empty');
         Wikia::Log(__METHOD__, '', $e);
     }
     $results = F::build('WikiaSearchResultSet', array($mltResult, $searchConfig));
     return $results;
 }