Authored by hugufei

fix bug

@@ -56,6 +56,17 @@ public class SearchCacheFactory { @@ -56,6 +56,17 @@ public class SearchCacheFactory {
56 } 56 }
57 57
58 /** 58 /**
  59 + * 获取聚合相关的缓存
  60 + *
  61 + * @return
  62 + */
  63 + public SearchCache getPagePersionalFactorCache() {
  64 + CacheType cacheType = CacheType.SEARCH_REDIS;
  65 + int cacheInMinute = 60;
  66 + return this.getOrCreateSearchCache("PAGE_PERSIONAL_FACTOR", cacheType, cacheInMinute);
  67 + }
  68 +
  69 + /**
59 * 获取默认的搜索缓存 70 * 获取默认的搜索缓存
60 * 71 *
61 * @return 72 * @return
@@ -96,7 +96,7 @@ public class EhCache implements CacheInterface { @@ -96,7 +96,7 @@ public class EhCache implements CacheInterface {
96 Collection<Element> elements = new ArrayList<>(); 96 Collection<Element> elements = new ArrayList<>();
97 for (Map.Entry<RedisKeyBuilder, ? extends String> entry: map.entrySet()) { 97 for (Map.Entry<RedisKeyBuilder, ? extends String> entry: map.entrySet()) {
98 Element element = new Element(entry.getKey().getKey(), entry.getValue()); 98 Element element = new Element(entry.getKey().getKey(), entry.getValue());
99 - element.setTimeToLive(timeoutInSecond * 60 * 60 ); 99 + element.setTimeToLive(timeoutInSecond);
100 elements.add(element); 100 elements.add(element);
101 } 101 }
102 cache.putAll(elements); 102 cache.putAll(elements);
@@ -128,8 +128,7 @@ public class ExtendFilterHelper { @@ -128,8 +128,7 @@ public class ExtendFilterHelper {
128 BoolQueryBuilder filter = QueryBuilders.boolQuery(); 128 BoolQueryBuilder filter = QueryBuilders.boolQuery();
129 //must 129 //must
130 filter.must(QueryBuilders.termQuery(ProductIndexEsField.middleSortId, sortPriceArea.getMiddleSortId())); 130 filter.must(QueryBuilders.termQuery(ProductIndexEsField.middleSortId, sortPriceArea.getMiddleSortId()));
131 - //TODO REPLACE gender WITH PriceArea  
132 - filter.must(QueryBuilders.termQuery(ProductIndexEsField.gender, sortPriceArea.getPriceArea())); 131 + filter.must(QueryBuilders.termQuery(ProductIndexEsField.priceArea, sortPriceArea.getPriceArea()));
133 //must not 132 //must not
134 filter.mustNot(forbiddenFlowFilter()); 133 filter.mustNot(forbiddenFlowFilter());
135 return filter; 134 return filter;
@@ -3,6 +3,7 @@ package com.yoho.search.recall.scene.persional; @@ -3,6 +3,7 @@ package com.yoho.search.recall.scene.persional;
3 import com.yoho.search.base.utils.ISearchConstants; 3 import com.yoho.search.base.utils.ISearchConstants;
4 import com.yoho.search.base.utils.ProductIndexEsField; 4 import com.yoho.search.base.utils.ProductIndexEsField;
5 import com.yoho.search.common.cache.SearchCacheFactory; 5 import com.yoho.search.common.cache.SearchCacheFactory;
  6 +import com.yoho.search.common.cache.model.SearchCache;
6 import com.yoho.search.core.es.model.SearchParam; 7 import com.yoho.search.core.es.model.SearchParam;
7 import com.yoho.search.core.es.model.SearchResult; 8 import com.yoho.search.core.es.model.SearchResult;
8 import com.yoho.search.recall.scene.models.ParamQueryFilter; 9 import com.yoho.search.recall.scene.models.ParamQueryFilter;
@@ -18,6 +19,7 @@ import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilde @@ -18,6 +19,7 @@ import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilde
18 import org.springframework.beans.factory.annotation.Autowired; 19 import org.springframework.beans.factory.annotation.Autowired;
19 import org.springframework.stereotype.Component; 20 import org.springframework.stereotype.Component;
20 21
  22 +import javax.annotation.PostConstruct;
21 import java.util.ArrayList; 23 import java.util.ArrayList;
22 import java.util.Iterator; 24 import java.util.Iterator;
23 import java.util.List; 25 import java.util.List;
@@ -33,6 +35,13 @@ class PersionalFactorPageComponent { @@ -33,6 +35,13 @@ class PersionalFactorPageComponent {
33 @Autowired 35 @Autowired
34 private SearchCacheFactory searchCacheFactory; 36 private SearchCacheFactory searchCacheFactory;
35 37
  38 + private SearchCache searchCache;
  39 +
  40 + @PostConstruct
  41 + void init(){
  42 + searchCache = searchCacheFactory.getPagePersionalFactorCache();
  43 + }
  44 +
36 /** 45 /**
37 * 获取链接中的个性化因子 46 * 获取链接中的个性化因子
38 * 47 *
@@ -52,14 +61,14 @@ class PersionalFactorPageComponent { @@ -52,14 +61,14 @@ class PersionalFactorPageComponent {
52 61
53 //2、品类价格带聚合 62 //2、品类价格带聚合
54 TermsAggregationBuilder middleAggBuilder = AggregationBuilders.terms("middleSortIdAgg").field(ProductIndexEsField.middleSortId).size(100); 63 TermsAggregationBuilder middleAggBuilder = AggregationBuilders.terms("middleSortIdAgg").field(ProductIndexEsField.middleSortId).size(100);
55 - TermsAggregationBuilder genderAggBuilder = AggregationBuilders.terms("genderAgg").field(ProductIndexEsField.gender).size(5); 64 + TermsAggregationBuilder genderAggBuilder = AggregationBuilders.terms("priceAreaAgg").field(ProductIndexEsField.priceArea).size(7);
56 middleAggBuilder.subAggregation(genderAggBuilder); 65 middleAggBuilder.subAggregation(genderAggBuilder);
57 aggregationBuilders.add(middleAggBuilder);//品类性格聚合 66 aggregationBuilders.add(middleAggBuilder);//品类性格聚合
58 searchParam.setAggregationBuilders(aggregationBuilders); 67 searchParam.setAggregationBuilders(aggregationBuilders);
59 68
60 //3、缓存中获取 69 //3、缓存中获取
61 String cacheKey = searchCacheService.genSearchParamString(ISearchConstants.INDEX_NAME_PRODUCT_INDEX,searchParam); 70 String cacheKey = searchCacheService.genSearchParamString(ISearchConstants.INDEX_NAME_PRODUCT_INDEX,searchParam);
62 - PersionalFactor pagePersionalFactor = searchCacheService.getSerializableObjectFromCache(searchCacheFactory.getAggregationSearchCache(),cacheKey,PersionalFactor.class,true); 71 + PersionalFactor pagePersionalFactor = searchCacheService.getSerializableObjectFromCache(searchCache,cacheKey,PersionalFactor.class,true);
63 if(pagePersionalFactor!=null) { 72 if(pagePersionalFactor!=null) {
64 return pagePersionalFactor; 73 return pagePersionalFactor;
65 } 74 }
@@ -83,9 +92,9 @@ class PersionalFactorPageComponent { @@ -83,9 +92,9 @@ class PersionalFactorPageComponent {
83 if (aggregation == null) { 92 if (aggregation == null) {
84 return brandIds; 93 return brandIds;
85 } 94 }
86 - Iterator<? extends MultiBucketsAggregation.Bucket> iteratorterator = aggregation.getBuckets().iterator();  
87 - while (iteratorterator.hasNext()) {  
88 - MultiBucketsAggregation.Bucket bucket = iteratorterator.next(); 95 + Iterator<? extends MultiBucketsAggregation.Bucket> brandIdIterator = aggregation.getBuckets().iterator();
  96 + while (brandIdIterator.hasNext()) {
  97 + MultiBucketsAggregation.Bucket bucket = brandIdIterator.next();
89 Integer brandId = Integer.valueOf(bucket.getKeyAsString()); 98 Integer brandId = Integer.valueOf(bucket.getKeyAsString());
90 brandIds.add(brandId); 99 brandIds.add(brandId);
91 } 100 }
@@ -103,15 +112,15 @@ class PersionalFactorPageComponent { @@ -103,15 +112,15 @@ class PersionalFactorPageComponent {
103 MultiBucketsAggregation.Bucket middleSortIdBucket = iterator.next(); 112 MultiBucketsAggregation.Bucket middleSortIdBucket = iterator.next();
104 Integer middleSortId = Integer.valueOf(middleSortIdBucket.getKeyAsString()); 113 Integer middleSortId = Integer.valueOf(middleSortIdBucket.getKeyAsString());
105 114
106 - MultiBucketsAggregation genderAggregation = ((MultiBucketsAggregation) middleSortIdBucket.getAggregations().asMap().get("genderAgg"));  
107 - if(genderAggregation==null){ 115 + MultiBucketsAggregation priceAreaAggregation = ((MultiBucketsAggregation) middleSortIdBucket.getAggregations().asMap().get("priceAreaAgg"));
  116 + if(priceAreaAggregation==null){
108 continue; 117 continue;
109 } 118 }
110 - Iterator<? extends MultiBucketsAggregation.Bucket> genderIterator = genderAggregation.getBuckets().iterator();  
111 - while (genderIterator.hasNext()) {  
112 - MultiBucketsAggregation.Bucket genderBucket = genderIterator.next();  
113 - Integer gender = Integer.valueOf(genderBucket.getKeyAsString());  
114 - sortPrices.add(new PersionalFactor.SortPriceArea(middleSortId, gender)); 119 + Iterator<? extends MultiBucketsAggregation.Bucket> priceAreaIterator = priceAreaAggregation.getBuckets().iterator();
  120 + while (priceAreaIterator.hasNext()) {
  121 + MultiBucketsAggregation.Bucket genderBucket = priceAreaIterator.next();
  122 + Integer priceArea = Integer.valueOf(genderBucket.getKeyAsString());
  123 + sortPrices.add(new PersionalFactor.SortPriceArea(middleSortId, priceArea));
115 } 124 }
116 } 125 }
117 return sortPrices; 126 return sortPrices;
@@ -32,7 +32,7 @@ public class SortPriceStrategy implements IStrategy { @@ -32,7 +32,7 @@ public class SortPriceStrategy implements IStrategy {
32 32
33 @Override 33 @Override
34 public SortBuilder<?> sortBuilder() { 34 public SortBuilder<?> sortBuilder() {
35 - return SortBuilderHelper.getHeatValueDescSort(); 35 + return SortBuilderHelper.getRandomSort();
36 } 36 }
37 37
38 @Override 38 @Override