Merge branch 'brandproduct' of http://git.yoho.cn/yoho-search/yoho-search-service into brandproduct
Showing
1 changed file
with
26 additions
and
48 deletions
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 | } |
-
Please register or login to post a comment