private static function searchAds(\ApiParam $params) { list($query, $category, $city, $wanted, $options, $realTime) = self::searchOption($params, 'createdTime desc'); $activeOnly = $params->activeOnly == 1; $inactiveOnly = $params->inactiveOnly == 1; $totalCount = 0; if ($inactiveOnly) { $searcher = new \InactiveSearcher($query, $options); } else { if ($activeOnly) { $query = new \AndQuery($query, new \Query('status', \Ad::STATUS_ACTIVE)); } if ($category) { $query = new \AndQuery($query, new \Query('categoryEnglishName', $category->englishName)); } if ($city) { $query = new \AndQuery($query, new \Query('cityEnglishName', $city->englishName)); } if (isset($wanted)) { $query = new \AndQuery($query, new \Query('wanted', $wanted)); } $searcher = new \ActiveSearcher($query, $options); if (!(isset($options['start']) && $options['start'] > 0)) { if ($params->isUserAd) { $searcher->prepend(new \RtSearcher($query, $options)); } else { // 修改过的很老的数据也会进rt库,只搜最近11分钟内创建的AD @zhongjiawu 2012-12-13 $rtQuery = new \AndQuery($query, new \DateFrangeQuery('createdTime', strtotime(date('Y-m-d H:i:00', time() - 660)))); $searcher->prepend(new \RtSearcher($rtQuery, $options)); } } if (!$activeOnly) { $searcher->prepend(new \InactiveSearcher($query, $options)); } } $totalCount += $searcher->totalCount(); return array($totalCount, $searcher->ads()); }
/** * Search ad by keyword and category */ public static function mobile_ad_search(\ApiParam $params) { $result = array(); $keyword = $params->query; //assume query == keyword $resultByFacet = array(); $options = array('facet.field' => 'categoryEnglishName', 'facet.mincount' => 0, 'facet.limit' => 10, 'waitSuccess' => true); $q = new \Query('title', $keyword); $q = new \AndQuery($q, new \Query('cityEnglishName', $params->cityEnglishName)); $res = new \ActiveSearcher($q, $options); $resultByFacets = $res->facet(); $result['count'] = count($resultByFacets); $data = array(); foreach (array_keys($resultByFacets) as $categoryEnglishName) { $matched = $resultByFacets[$categoryEnglishName]; if ($matched == 0) { continue; } try { $categoryName = self::loadCategoryName($categoryEnglishName); } catch (\Exception $e) { continue; } if (!empty($categoryName)) { //中文类目名为空则标志此类目当前不显示 $data[] = array($categoryEnglishName, $categoryName, $matched); } } $result['data'] = $data; return $result; }