...
|
...
|
@@ -12,6 +12,7 @@ import java.util.Map; |
|
|
import java.util.Map.Entry;
|
|
|
|
|
|
import com.yoho.search.base.utils.ConvertUtils;
|
|
|
import com.yoho.search.common.cache.aop.SearchCacheAble;
|
|
|
import com.yoho.search.service.helper.ProductListHelper;
|
|
|
import org.apache.commons.collections.MapUtils;
|
|
|
import org.apache.commons.lang.StringUtils;
|
...
|
...
|
@@ -269,45 +270,34 @@ public class BrandServiceImpl extends AbstractCacheAbleService implements IBrand |
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@SearchCacheAble(cacheInMinute = 30, cacheName = "GROUP_BRANDS", excludeParams = {"page", "order", "uid", "udid"})
|
|
|
public SearchApiResult groupBrands(Map<String, String> paramMap) {
|
|
|
try {
|
|
|
logger.info("[func=groupBrands][param={}][begin={}]", paramMap.toString(), System.currentTimeMillis());
|
|
|
// 1、参数检验
|
|
|
if (!paramMap.containsKey("brand")) {
|
|
|
// 0、参数检验
|
|
|
if (!paramMap.containsKey(SearchRequestParams.PARAM_SEARCH_BRAND)) {
|
|
|
return new SearchApiResult().setCode(400).setMessage("没有 brand参数 ");
|
|
|
}
|
|
|
// 2、获取聚合条件
|
|
|
// 1、获取topHitCount
|
|
|
int topHitCount = StringUtils.isBlank(paramMap.get("viewNum")) ? 10 : Integer.parseInt(paramMap.get("viewNum"));
|
|
|
// 3、是否需要个性化
|
|
|
// 2、获取聚合的排序规则
|
|
|
String topHitOrder = "heatValue:desc";
|
|
|
if (topHitCount > 0 && searchCommonHelper.isNeedPersonalSearch(paramMap)) {
|
|
|
topHitOrder = "_score:desc";
|
|
|
}
|
|
|
|
|
|
// 4、构建searchParam
|
|
|
SearchParam searchParam = searchParamHelper.buildWithPersional(paramMap, topHitCount > 0 ? true : false);
|
|
|
// 3、构建searchParam
|
|
|
SearchParam searchParam = searchParamHelper.buildWithPersional(paramMap, false);
|
|
|
IAggregation groupBrandAgg = aggregationFactoryService.getGroupBrandAggregation(topHitOrder, topHitCount);
|
|
|
searchParam.setAggregationBuilders(Arrays.asList(groupBrandAgg.getBuilder()));
|
|
|
searchParam.setOffset(0);
|
|
|
searchParam.setSize(0);
|
|
|
searchParam.setOffset(topHitCount * 2);// justForCache
|
|
|
|
|
|
// 5、从缓存中获取
|
|
|
final String productIndexName = ISearchConstants.INDEX_NAME_PRODUCT_INDEX;
|
|
|
JSONObject groupBrandResult = searchCacheService.getJSONObjectFromCache(this.searchCache, productIndexName, searchParam);
|
|
|
if (groupBrandResult != null) {
|
|
|
SearchCacheMatchLogger.doSearchCacheMatchLog("/productindex/groupBrands.json", paramMap);
|
|
|
return new SearchApiResult().setData(groupBrandResult);
|
|
|
}
|
|
|
// 6、从ES中获取
|
|
|
groupBrandResult = aggregationService.getAggNameAndResponseWithTotal(groupBrandAgg, searchParam);
|
|
|
// 4、从ES中获取
|
|
|
JSONObject groupBrandResult = aggregationService.getAggNameAndResponseWithTotal(groupBrandAgg, searchParam);
|
|
|
if (groupBrandResult == null) {
|
|
|
return new SearchApiResult().setData(500).setMessage("exception");
|
|
|
}
|
|
|
// 7、生成结果并且加入缓存
|
|
|
// 5、返回生成结果
|
|
|
JSONObject realResult = new JSONObject();
|
|
|
realResult.put("total", groupBrandResult.getOrDefault("total", 0));
|
|
|
realResult.put("brands", groupBrandResult.getOrDefault(groupBrandAgg.aggName(), new JSONObject()));
|
|
|
searchCacheService.addJSONObjectToCache(this.searchCache, productIndexName, searchParam, realResult);
|
|
|
return new SearchApiResult().setData(realResult).setMessage("groupBrands new List.");
|
|
|
} catch (Exception e) {
|
|
|
publisher.publishEvent(new SearchEvent(EventReportEnum.SEARCHCONTROLLER_GROUP_BRANDS.getEventName(), EventReportEnum.SEARCHCONTROLLER_GROUP_BRANDS.getFunctionName(),
|
...
|
...
|
|