/**
  * Inspects request and sets config accordingly.
  * @return Wikia\Search\Config
  */
 protected function getConfigFromRequest()
 {
     $request = $this->getRequest();
     $limit = self::POPULAR_ARTICLES_PER_WIKI;
     $baseArticleId = $request->getVal(self::PARAMETER_BASE_ARTICLE_ID, false);
     if ($baseArticleId !== false) {
         $limit = self::TRENDING_ARTICLES_LIMIT;
     }
     $searchConfig = new Wikia\Search\Config();
     $searchConfig->setLimit($limit)->setRank(\Wikia\Search\Config::RANK_MOST_VIEWED)->setOnWiki(true)->setNamespaces([self::POPULAR_ARTICLES_NAMESPACE])->setQuery('*')->setMainPage(false);
     return $searchConfig;
 }
Ejemplo n.º 2
0
 protected function getTopArticles($wikiId, $lang)
 {
     return \WikiaDataAccess::cache(wfSharedMemcKey("CombinedSearchService", $wikiId, $lang), self::TOP_ARTICLES_CACHE_TIME, function () use($wikiId, $lang) {
         $timer = Time::start(["CombinedSearchService", "getTopArticles"]);
         $requestedFields = ["title", "url", "id", "score", "pageid", "lang", "wid", "article_quality_i", Utilities::field('html', $lang)];
         $topArticlesMap = \DataMartService::getTopArticlesByPageview($wikiId, null, [NS_MAIN], false, self::TOP_ARTICLES_PER_WIKI + 1);
         $query = " +(" . Utilities::valueForField("wid", $wikiId) . ") ";
         $query .= " +( " . implode(" OR ", array_map(function ($x) {
             return Utilities::valueForField("pageid", $x);
         }, array_keys($topArticlesMap))) . ") ";
         $query .= " +(is_main_page:false) ";
         $searchConfig = new Config();
         $searchConfig->setLimit(self::TOP_ARTICLES_PER_WIKI)->setQuery($query)->setPage(1)->setRequestedFields($requestedFields)->setDirectLuceneQuery(true)->setWikiId($wikiId);
         $resultSet = (new Factory())->getFromConfig($searchConfig)->search();
         $currentResults = $resultSet->toArray($requestedFields);
         $articles = [];
         foreach ($currentResults as $article) {
             $articles[$article['pageid']] = $this->processArticle($article);
             if (sizeof($articles) >= self::TOP_ARTICLES_PER_WIKI) {
                 break;
             }
         }
         $result = [];
         foreach ($topArticlesMap as $id => $a) {
             if (isset($articles[$id])) {
                 $result[] = $articles[$id];
             }
         }
         $timer->stop();
         return $result;
     });
 }