Example #1
0
 /**
  * Creates an instance of Solarium_Query_Select configured by searchconfig.
  * @see    WikiaSearchTest::testGetQuery
  * @param  Solarium_Query_Select $query
  * @param  WikiaSearchConfig $searchConfig
  * @return Solarium_Query_Select
  */
 private function getSelectQuery(WikiaSearchConfig $searchConfig)
 {
     wfProfileIn(__METHOD__);
     $query = $this->client->createSelect();
     $query->setDocumentClass('WikiaSearchResult');
     $sort = $searchConfig->getSort();
     $query->addFields($searchConfig->getRequestedFields())->removeField('*')->setStart($searchConfig->getStart())->setRows($searchConfig->getLength())->addSort($sort[0], $sort[1])->addParam('timeAllowed', $searchConfig->isInterWiki() ? 7500 : 5000);
     $highlighting = $query->getHighlighting();
     $highlighting->addField(self::field('html'))->setSnippets(1)->setRequireFieldMatch(true)->setFragSize(self::HL_FRAG_SIZE)->setSimplePrefix(self::HL_MATCH_PREFIX)->setSimplePostfix(self::HL_MATCH_POSTFIX)->setAlternateField('html')->setMaxAlternateFieldLength(100);
     $query->addFilterQuery(array('query' => $this->getFilterQueryString($searchConfig), 'key' => 'fq1'));
     if ($searchConfig->isInterWiki()) {
         $grouping = $query->getGrouping();
         $grouping->setLimit(self::GROUP_RESULTS_GROUPING_ROW_LIMIT)->setOffset($searchConfig->getStart())->setFields(array(self::GROUP_RESULTS_GROUPING_FIELD));
     }
     // this is how we prevent duplicate results when we already have PTT
     $noPtt = '';
     if ($searchConfig->hasArticleMatch()) {
         $am = $searchConfig->getArticleMatch();
         $article = $am->getArticle();
         $noPtt = self::valueForField('id', sprintf('%s_%s', $searchConfig->getCityId(), $article->getID()), array('negate' => true));
         $query->addFilterQuery(array('query' => $noPtt, 'key' => 'ptt'));
     }
     $formulatedQuery = sprintf('%s AND (%s)', $this->getQueryClausesString($searchConfig), $this->getNestedQuery($searchConfig));
     $query->setQuery($formulatedQuery);
     wfProfileOut(__METHOD__);
     return $query;
 }