Authored by hugufei

groupBrands和groupShops去除个性化逻辑

... ... @@ -85,6 +85,5 @@ public class GroupBrandAggregation extends AbstractAggregation {
dataMap.put(brandId, tempResult);
}
return dataMap;
}
}
... ...
... ... @@ -55,8 +55,6 @@ public class GroupShopAggregation extends AbstractAggregation {
return AggCommonHelper.getTopHitAggregation(Arrays.asList(simpleFieldAgg), this.topHitOrder, this.topHitCount);
}
@Override
public Object getAggregationResponseMap(Map<String, Aggregation> aggMaps) {
// 获取每个品牌下对应的数量和列表
... ... @@ -85,6 +83,5 @@ public class GroupShopAggregation extends AbstractAggregation {
dataMap.put(shopId, tempResult);
}
return dataMap;
}
}
... ...
... ... @@ -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(),
... ...
... ... @@ -69,29 +69,27 @@ public class ShopsServiceImpl extends BaseService implements IShopsService, Appl
}
@Override
@SearchCacheAble(cacheInMinute = 30, cacheName = "GROUP_SHOPS", excludeParams = { "page", "order" })
@SearchCacheAble(cacheInMinute = 30, cacheName = "GROUP_SHOPS", excludeParams = {"page", "order", "uid", "udid"})
public SearchApiResult group_shops(Map<String, String> paramMap) {
try {
// 1、获取topHitCount
int topHitCount = StringUtils.isBlank(paramMap.get("viewNum")) ? 10 : Integer.parseInt(paramMap.get("viewNum"));
// 2、获取聚合的排序规则
String topHitOrder = "heatValue:desc";
if (topHitCount > 0 && searchCommonHelper.isNeedPersonalSearch(paramMap)) {
topHitOrder = "_score:desc";
}
// 3、获取聚合条件
IAggregation groupShopAgg = aggregationFactoryService.getGroupShopAggregation(topHitOrder, topHitCount);
// 4、构建searchParam
// 3、构建searchParam
SearchParam searchParam = searchParamHelper.buildWithPersional(paramMap, topHitCount > 0 ? true : false);
IAggregation groupShopAgg = aggregationFactoryService.getGroupShopAggregation(topHitOrder, topHitCount);
searchParam.setAggregationBuilders(Arrays.asList(groupShopAgg.getBuilder()));
searchParam.setOffset(0);
searchParam.setSize(0);
// 5、从ES中获取
// 4、从ES中获取
JSONObject aggNameAndResponse = aggregationService.getAggNameAndResponseWithTotal(groupShopAgg, searchParam);
if (aggNameAndResponse == null) {
return new SearchApiResult().setData(500).setMessage("exception");
}
// 6、返回生成结果
// 5、返回生成结果
JSONObject realResult = new JSONObject();
realResult.put("total", aggNameAndResponse.getOrDefault("total", 0));
realResult.put("shops", aggNameAndResponse.getOrDefault(groupShopAgg.aggName(), new JSONObject()));
... ... @@ -104,7 +102,7 @@ public class ShopsServiceImpl extends BaseService implements IShopsService, Appl
}
@Override
@SearchCacheAble(cacheInMinute = 30, cacheName = "SEARCH_YOHO_BRAND", includeParams = { "keyword", "is_encode"})
@SearchCacheAble(cacheInMinute = 30, cacheName = "SEARCH_YOHO_BRAND", includeParams = {"keyword", "is_encode"})
public SearchApiResult searchYohoBrand(Map<String, String> paramMap) {
try {
// 1、参数校验
... ... @@ -158,7 +156,7 @@ public class ShopsServiceImpl extends BaseService implements IShopsService, Appl
}
@Override
@SearchCacheAble(cacheInMinute = 30, cacheName = "SEARCH_SHOP_NEW", includeParams = { "keyword", "is_encode"})
@SearchCacheAble(cacheInMinute = 30, cacheName = "SEARCH_SHOP_NEW", includeParams = {"keyword", "is_encode"})
public SearchApiResult searchShopsNew(Map<String, String> paramMap) {
try {
logger.info("[func=searchShops][param={}][begin={}]", paramMap.toString(), System.currentTimeMillis());
... ...