Authored by zhaojun2

Merge branch 'brandproduct' of http://git.yoho.cn/yoho-search/yoho-search-service into brandproduct

1 package com.yoho.search.service.scene.activity; 1 package com.yoho.search.service.scene.activity;
2 2
3 -import com.alibaba.fastjson.JSON;  
4 -import com.alibaba.fastjson.JSONArray;  
5 -import com.alibaba.fastjson.JSONObject;  
6 -import com.alibaba.fastjson.TypeReference;  
7 -import com.alibaba.fastjson.serializer.SerializerFeature;  
8 import com.yoho.core.redis.cluster.operations.serializer.RedisKeyBuilder; 3 import com.yoho.core.redis.cluster.operations.serializer.RedisKeyBuilder;
9 import com.yoho.search.base.utils.ISearchConstants; 4 import com.yoho.search.base.utils.ISearchConstants;
10 import com.yoho.search.base.utils.ProductIndexEsField; 5 import com.yoho.search.base.utils.ProductIndexEsField;
11 import com.yoho.search.cache.CacheTimeConstants; 6 import com.yoho.search.cache.CacheTimeConstants;
12 -import com.yoho.search.cache.beans.AbstractPageComponent;  
13 -import com.yoho.search.cache.model.CacheObject; 7 +import com.yoho.search.cache.beans.AbstractCacheComponent;
14 import com.yoho.search.common.SearchCommonService; 8 import com.yoho.search.common.SearchCommonService;
15 import com.yoho.search.core.es.model.SearchParam; 9 import com.yoho.search.core.es.model.SearchParam;
16 import com.yoho.search.core.es.model.SearchResult; 10 import com.yoho.search.core.es.model.SearchResult;
17 import com.yoho.search.service.helper.SearchParamHelper; 11 import com.yoho.search.service.helper.SearchParamHelper;
18 import com.yoho.search.service.recall.models.common.ParamQueryFilter; 12 import com.yoho.search.service.recall.models.common.ParamQueryFilter;
19 -import org.elasticsearch.index.query.BoolQueryBuilder;  
20 import org.elasticsearch.search.aggregations.AbstractAggregationBuilder; 13 import org.elasticsearch.search.aggregations.AbstractAggregationBuilder;
21 import org.elasticsearch.search.aggregations.Aggregation; 14 import org.elasticsearch.search.aggregations.Aggregation;
22 import org.elasticsearch.search.aggregations.AggregationBuilders; 15 import org.elasticsearch.search.aggregations.AggregationBuilders;
23 import org.elasticsearch.search.aggregations.bucket.MultiBucketsAggregation; 16 import org.elasticsearch.search.aggregations.bucket.MultiBucketsAggregation;
24 -import org.elasticsearch.search.aggregations.bucket.terms.Terms;  
25 import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; 17 import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
26 -import org.slf4j.Logger;  
27 -import org.slf4j.LoggerFactory;  
28 import org.springframework.beans.factory.annotation.Autowired; 18 import org.springframework.beans.factory.annotation.Autowired;
29 import org.springframework.stereotype.Component; 19 import org.springframework.stereotype.Component;
30 -import org.springframework.util.CollectionUtils;  
31 20
32 -import java.lang.reflect.Type;  
33 import java.util.*; 21 import java.util.*;
34 22
35 @Component 23 @Component
36 -public class AggBrandService extends AbstractPageComponent<List<AggBrand>> { 24 +public class AggBrandService extends AbstractCacheComponent<List<AggBrand>> {
37 25
38 @Autowired 26 @Autowired
39 private SearchCommonService searchCommonService; 27 private SearchCommonService searchCommonService;
@@ -41,39 +29,15 @@ public class AggBrandService extends AbstractPageComponent<List<AggBrand>> { @@ -41,39 +29,15 @@ public class AggBrandService extends AbstractPageComponent<List<AggBrand>> {
41 private SearchParamHelper searchParamHelper; 29 private SearchParamHelper searchParamHelper;
42 30
43 public List<AggBrand> aggBrands(ParamQueryFilter paramQueryFilter) { 31 public List<AggBrand> aggBrands(ParamQueryFilter paramQueryFilter) {
44 - RedisKeyBuilder redisKeyBuilder = this.genRedisKeyBuilder(paramQueryFilter);  
45 - List<AggBrand> value = queryFromCache(redisKeyBuilder);  
46 - if (CollectionUtils.isEmpty(value)) {  
47 - value = getFromEs(searchParamHelper.buildSearchParam(paramQueryFilter));  
48 - if (!CollectionUtils.isEmpty(value)) {  
49 - addToRedisAndEhcache(redisKeyBuilder, value);  
50 - } 32 + List<AggBrand> value;
  33 + try {
  34 + value = queryWithCache(paramQueryFilter, null);
  35 + } catch (Exception e) {
  36 + return Collections.emptyList();
51 } 37 }
52 return value != null ? value : Collections.emptyList(); 38 return value != null ? value : Collections.emptyList();
53 } 39 }
54 40
55 - @Override  
56 - protected RedisKeyBuilder genRedisKeyBuilder(ParamQueryFilter paramQueryFilter) {  
57 - return RedisKeyBuilder.newInstance().appendFixed("YOHOSEARCH:").appendFixed("BRAND_PRODUCT_LIST:").appendVar(paramQueryFilter.getParamMd5Key());  
58 - }  
59 -  
60 - @Override  
61 - protected int cacheTimeInMinute() {  
62 - return CacheTimeConstants.CACHE_10_MINUTE;  
63 - }  
64 -  
65 - private List<AggBrand> getFromEs(SearchParam searchParam) {  
66 - //2、构造聚合参数  
67 - List<AbstractAggregationBuilder<?>> aggregationBuilders = new ArrayList<>();  
68 - TermsAggregationBuilder firstAggregationBuilder = AggregationBuilders.terms("brandAgg").field(ProductIndexEsField.brandId).size(500);  
69 - aggregationBuilders.add(firstAggregationBuilder);  
70 - searchParam.setAggregationBuilders(aggregationBuilders);  
71 - SearchResult searchResult = searchCommonService.doSearch(ISearchConstants.INDEX_NAME_PRODUCT_INDEX, searchParam);  
72 - Map<String, Aggregation> aggregationMap = searchResult.getAggMaps();  
73 - return this.genAggBrand(aggregationMap);  
74 -  
75 - }  
76 -  
77 private List<AggBrand> genAggBrand(Map<String, Aggregation> aggMaps) { 41 private List<AggBrand> genAggBrand(Map<String, Aggregation> aggMaps) {
78 MultiBucketsAggregation aggregation = (MultiBucketsAggregation)aggMaps.get("brandAgg"); 42 MultiBucketsAggregation aggregation = (MultiBucketsAggregation)aggMaps.get("brandAgg");
79 Iterator<? extends MultiBucketsAggregation.Bucket> itSizeAgg = aggregation.getBuckets().iterator(); 43 Iterator<? extends MultiBucketsAggregation.Bucket> itSizeAgg = aggregation.getBuckets().iterator();
@@ -88,13 +52,27 @@ public class AggBrandService extends AbstractPageComponent<List<AggBrand>> { @@ -88,13 +52,27 @@ public class AggBrandService extends AbstractPageComponent<List<AggBrand>> {
88 return aggBrands; 52 return aggBrands;
89 } 53 }
90 54
91 - private void addToRedisAndEhcache(RedisKeyBuilder redisKeyBuilder, List<AggBrand> result) {  
92 - addJavaObjectToEhcache(redisKeyBuilder, result);  
93 - addToRedis(redisKeyBuilder, JSON.toJSONString(result, SerializerFeature.WriteMapNullValue)); 55 + @Override
  56 + protected List<AggBrand> doRealQuery(ParamQueryFilter paramQueryFilter, Map<String, String> paramMap) {
  57 + List<AbstractAggregationBuilder<?>> aggregationBuilders = new ArrayList<>();
  58 + TermsAggregationBuilder firstAggregationBuilder = AggregationBuilders.terms("brandAgg").field(ProductIndexEsField.brandId).size(500);
  59 + aggregationBuilders.add(firstAggregationBuilder);
  60 +
  61 + SearchParam searchParam = searchParamHelper.buildSearchParam(paramQueryFilter);
  62 + searchParam.setAggregationBuilders(aggregationBuilders);
  63 + SearchResult searchResult = searchCommonService.doSearch(ISearchConstants.INDEX_NAME_PRODUCT_INDEX, searchParam);
  64 + Map<String, Aggregation> aggregationMap = searchResult.getAggMaps();
  65 + return this.genAggBrand(aggregationMap);
  66 + }
  67 +
  68 + @Override
  69 + protected RedisKeyBuilder genRedisKeyBuilder(ParamQueryFilter paramQueryFilter) {
  70 + return RedisKeyBuilder.newInstance().appendFixed("YOHOSEARCH:").appendFixed("BRAND_PRODUCT_LIST_NEW:").appendVar(paramQueryFilter.getParamMd5Key());
94 } 71 }
95 72
96 @Override 73 @Override
97 - protected List<AggBrand> doRealQuery(ParamQueryFilter paramQueryFilter) {  
98 - return null; 74 + protected int cacheTimeInMinute() {
  75 + return CacheTimeConstants.CACHE_10_MINUTE;
99 } 76 }
  77 +
100 } 78 }