Authored by hugufei

找相似使用APO实现缓存

@@ -74,7 +74,7 @@ public class ProductIndexBaseService { @@ -74,7 +74,7 @@ public class ProductIndexBaseService {
74 productIndexIncludeFields.add(ProductIndexEsField.gender); 74 productIndexIncludeFields.add(ProductIndexEsField.gender);
75 productIndexIncludeFields.add(ProductIndexEsField.ageLevel); 75 productIndexIncludeFields.add(ProductIndexEsField.ageLevel);
76 //productIndexIncludeFields.add(ProductIndexEsField.salesPhrase); 76 //productIndexIncludeFields.add(ProductIndexEsField.salesPhrase);
77 - // productIndexIncludeFields.add(ProductIndexEsField.phrase); 77 + //productIndexIncludeFields.add(ProductIndexEsField.phrase);
78 productIndexIncludeFields.add(ProductIndexEsField.status); 78 productIndexIncludeFields.add(ProductIndexEsField.status);
79 productIndexIncludeFields.add(ProductIndexEsField.goodsList); 79 productIndexIncludeFields.add(ProductIndexEsField.goodsList);
80 80
@@ -25,7 +25,6 @@ import com.yoho.search.base.utils.ProductIndexEsField; @@ -25,7 +25,6 @@ import com.yoho.search.base.utils.ProductIndexEsField;
25 import com.yoho.search.core.es.model.SearchParam; 25 import com.yoho.search.core.es.model.SearchParam;
26 import com.yoho.search.core.es.model.SearchResult; 26 import com.yoho.search.core.es.model.SearchResult;
27 import com.yoho.search.models.SearchFieldBoost; 27 import com.yoho.search.models.SearchFieldBoost;
28 -import com.yoho.search.service.base.SearchCacheService;  
29 import com.yoho.search.service.base.SearchCommonService; 28 import com.yoho.search.service.base.SearchCommonService;
30 import com.yoho.search.service.base.index.ProductIndexBaseService; 29 import com.yoho.search.service.base.index.ProductIndexBaseService;
31 import com.yoho.search.service.helper.FunctionScoreSearchHelper; 30 import com.yoho.search.service.helper.FunctionScoreSearchHelper;
@@ -57,9 +56,6 @@ public class SearchLikeHelper { @@ -57,9 +56,6 @@ public class SearchLikeHelper {
57 } 56 }
58 } 57 }
59 58
60 - @Autowired  
61 - private SearchCacheService searchCacheService;  
62 -  
63 @PostConstruct 59 @PostConstruct
64 void init() { 60 void init() {
65 // 品类权重 61 // 品类权重
@@ -101,7 +97,7 @@ public class SearchLikeHelper { @@ -101,7 +97,7 @@ public class SearchLikeHelper {
101 * @param productSkn 97 * @param productSkn
102 * @return 98 * @return
103 */ 99 */
104 - protected JSONObject getProductInfoInEs(String productSkn) { 100 + public JSONObject getProductInfoInEs(String productSkn) {
105 SearchParam searchParam = new SearchParam(); 101 SearchParam searchParam = new SearchParam();
106 searchParam.setQuery(QueryBuilders.matchAllQuery()); 102 searchParam.setQuery(QueryBuilders.matchAllQuery());
107 BoolQueryBuilder boolFilter = QueryBuilders.boolQuery(); 103 BoolQueryBuilder boolFilter = QueryBuilders.boolQuery();
@@ -109,7 +105,10 @@ public class SearchLikeHelper { @@ -109,7 +105,10 @@ public class SearchLikeHelper {
109 searchParam.setFiter(boolFilter); 105 searchParam.setFiter(boolFilter);
110 searchParam.setAggregationBuilders(null); 106 searchParam.setAggregationBuilders(null);
111 searchParam.setSize(1); 107 searchParam.setSize(1);
112 - 108 + // 设置返回参数,节省带宽
  109 + List<String> includeFields = productIndexBaseService.getProductIndexIncludeFields();
  110 + searchParam.setIncludeFields(includeFields);
  111 +
113 String productIndexName = ISearchConstants.INDEX_NAME_PRODUCT_INDEX; 112 String productIndexName = ISearchConstants.INDEX_NAME_PRODUCT_INDEX;
114 SearchResult searchResult = searchCommonService.doSearch(productIndexName, searchParam); 113 SearchResult searchResult = searchCommonService.doSearch(productIndexName, searchParam);
115 if (searchResult == null) { 114 if (searchResult == null) {
@@ -151,12 +150,12 @@ public class SearchLikeHelper { @@ -151,12 +150,12 @@ public class SearchLikeHelper {
151 boolFilter.mustNot(QueryBuilders.termsQuery(ProductIndexEsField.isSeckill, "Y")); 150 boolFilter.mustNot(QueryBuilders.termsQuery(ProductIndexEsField.isSeckill, "Y"));
152 boolFilter.mustNot(QueryBuilders.termQuery(ProductIndexEsField.isFobbiden, 1)); 151 boolFilter.mustNot(QueryBuilders.termQuery(ProductIndexEsField.isFobbiden, 1));
153 boolFilter.mustNot(QueryBuilders.termQuery(ProductIndexEsField.attribute, 2)); 152 boolFilter.mustNot(QueryBuilders.termQuery(ProductIndexEsField.attribute, 2));
154 - 153 +
155 boolFilter.must(QueryBuilders.termQuery(ProductIndexEsField.status, 1)); 154 boolFilter.must(QueryBuilders.termQuery(ProductIndexEsField.status, 1));
156 boolFilter.must(QueryBuilders.rangeQuery(ProductIndexEsField.storageNum).gte(1)); 155 boolFilter.must(QueryBuilders.rangeQuery(ProductIndexEsField.storageNum).gte(1));
157 - 156 +
158 boolFilter.must(QueryBuilders.termQuery(ProductIndexEsField.isOutlets, 2)); 157 boolFilter.must(QueryBuilders.termQuery(ProductIndexEsField.isOutlets, 2));
159 - 158 +
160 if (notProductSkns != null && !notProductSkns.isEmpty()) { 159 if (notProductSkns != null && !notProductSkns.isEmpty()) {
161 boolFilter.mustNot(QueryBuilders.termsQuery("productSkn", notProductSkns)); 160 boolFilter.mustNot(QueryBuilders.termsQuery("productSkn", notProductSkns));
162 } 161 }
@@ -222,13 +221,13 @@ public class SearchLikeHelper { @@ -222,13 +221,13 @@ public class SearchLikeHelper {
222 this.append(query, productInfoInEs.getString("pattern")); 221 this.append(query, productInfoInEs.getString("pattern"));
223 return query; 222 return query;
224 } 223 }
225 - 224 +
226 public String genYohoQueryStringWithBrandName(JSONObject productInfoInEs) { 225 public String genYohoQueryStringWithBrandName(JSONObject productInfoInEs) {
227 StringBuilder query = this.genYohoDefaultQueryString(productInfoInEs); 226 StringBuilder query = this.genYohoDefaultQueryString(productInfoInEs);
228 this.append(query, productInfoInEs.getString("brandName")); 227 this.append(query, productInfoInEs.getString("brandName"));
229 return query.toString(); 228 return query.toString();
230 } 229 }
231 - 230 +
232 public String genYohoQueryStringWithOutBrandName(JSONObject productInfoInEs) { 231 public String genYohoQueryStringWithOutBrandName(JSONObject productInfoInEs) {
233 StringBuilder query = this.genYohoDefaultQueryString(productInfoInEs); 232 StringBuilder query = this.genYohoDefaultQueryString(productInfoInEs);
234 String queryString = query.toString(); 233 String queryString = query.toString();
@@ -248,11 +247,6 @@ public class SearchLikeHelper { @@ -248,11 +247,6 @@ public class SearchLikeHelper {
248 return query.toString(); 247 return query.toString();
249 } 248 }
250 249
251 - public List<Map<String, Object>> queryProductList(SearchParam searchParam) {  
252 - SearchResult searchResult = searchCommonService.doSearch(ISearchConstants.INDEX_NAME_PRODUCT_INDEX, searchParam);  
253 - return searchResult.getResultList();  
254 - }  
255 -  
256 public List<Map<String, Object>> queryProductList(List<SearchParam> searchParams) { 250 public List<Map<String, Object>> queryProductList(List<SearchParam> searchParams) {
257 List<SearchResult> searchResults = searchCommonService.doMutiSearch(ISearchConstants.INDEX_NAME_PRODUCT_INDEX, searchParams); 251 List<SearchResult> searchResults = searchCommonService.doMutiSearch(ISearchConstants.INDEX_NAME_PRODUCT_INDEX, searchParams);
258 List<Map<String, Object>> results = new ArrayList<Map<String, Object>>(); 252 List<Map<String, Object>> results = new ArrayList<Map<String, Object>>();
@@ -18,12 +18,11 @@ import org.springframework.beans.factory.annotation.Autowired; @@ -18,12 +18,11 @@ import org.springframework.beans.factory.annotation.Autowired;
18 import org.springframework.stereotype.Service; 18 import org.springframework.stereotype.Service;
19 19
20 import com.alibaba.fastjson.JSONObject; 20 import com.alibaba.fastjson.JSONObject;
21 -import com.yoho.search.common.cache.model.SearchCache; 21 +import com.yoho.search.common.cache.aop.SearchCacheAble;
22 import com.yoho.search.core.es.model.SearchParam; 22 import com.yoho.search.core.es.model.SearchParam;
23 import com.yoho.search.models.SearchApiResult; 23 import com.yoho.search.models.SearchApiResult;
24 import com.yoho.search.service.base.SearchRequestParams; 24 import com.yoho.search.service.base.SearchRequestParams;
25 import com.yoho.search.service.base.index.ProductIndexBaseService; 25 import com.yoho.search.service.base.index.ProductIndexBaseService;
26 -import com.yoho.search.service.scene.common.AbstractCacheAbleService;  
27 26
28 /** 27 /**
29 * 店铺内找相似 28 * 店铺内找相似
@@ -31,7 +30,7 @@ import com.yoho.search.service.scene.common.AbstractCacheAbleService; @@ -31,7 +30,7 @@ import com.yoho.search.service.scene.common.AbstractCacheAbleService;
31 * @author gufei.hu 30 * @author gufei.hu
32 */ 31 */
33 @Service 32 @Service
34 -public class SearchLikeInShopService extends AbstractCacheAbleService { 33 +public class SearchLikeInShopService {
35 34
36 private static final Logger logger = LoggerFactory.getLogger(SearchLikeInShopService.class); 35 private static final Logger logger = LoggerFactory.getLogger(SearchLikeInShopService.class);
37 36
@@ -39,18 +38,14 @@ public class SearchLikeInShopService extends AbstractCacheAbleService { @@ -39,18 +38,14 @@ public class SearchLikeInShopService extends AbstractCacheAbleService {
39 private SearchLikeHelper searchLikeHelper; 38 private SearchLikeHelper searchLikeHelper;
40 @Autowired 39 @Autowired
41 private ProductIndexBaseService productIndexBaseService; 40 private ProductIndexBaseService productIndexBaseService;
42 -  
43 - @Override  
44 - public SearchCache getSearchCache() {  
45 - return searchCacheFactory.getSearchLikeSearchCache();  
46 - }  
47 - 41 +
48 /** 42 /**
49 * 店铺内推荐 43 * 店铺内推荐
50 * 44 *
51 * @param paramMap 45 * @param paramMap
52 * @return 46 * @return
53 */ 47 */
  48 + @SearchCacheAble(cacheInMinute = 600, cacheName = "SEARCH_LIKE_IN_SHOP", includeParams = { "product_skn", "viewNum" })
54 public SearchApiResult searchLikeInShop(Map<String, String> paramMap) { 49 public SearchApiResult searchLikeInShop(Map<String, String> paramMap) {
55 try { 50 try {
56 // 1、获取参数 51 // 1、获取参数
@@ -61,30 +56,23 @@ public class SearchLikeInShopService extends AbstractCacheAbleService { @@ -61,30 +56,23 @@ public class SearchLikeInShopService extends AbstractCacheAbleService {
61 // 2、检测分页参数【默认30条,最多60条】 56 // 2、检测分页参数【默认30条,最多60条】
62 int pageSize = searchLikeHelper.getPageSize(paramMap); 57 int pageSize = searchLikeHelper.getPageSize(paramMap);
63 58
64 - // 3、从缓存中获取,找到则直接返回  
65 - String redisCacheKey = searchCacheKeyHelper.getSearchLikeInShopKeyCache(productSkn, pageSize);  
66 - JSONObject cacheObject = searchCacheService.getJSONObjectFromCache(this.searchCache, redisCacheKey);  
67 - if (cacheObject != null) {  
68 - return new SearchApiResult().setData(cacheObject);  
69 - }  
70 -  
71 - // 4、获取当前查询的SKN的基本信息 59 + // 3、获取当前查询的SKN的基本信息
72 JSONObject productInfoInEs = searchLikeHelper.getProductInfoInEs(productSkn); 60 JSONObject productInfoInEs = searchLikeHelper.getProductInfoInEs(productSkn);
73 if (productInfoInEs == null) { 61 if (productInfoInEs == null) {
74 return new SearchApiResult().setCode(400).setMessage("SKN不存在"); 62 return new SearchApiResult().setCode(400).setMessage("SKN不存在");
75 } 63 }
76 64
77 - // 5、设置SearchParams 65 + // 4、设置SearchParams
78 List<SearchParam> searchParams = new ArrayList<SearchParam>(); 66 List<SearchParam> searchParams = new ArrayList<SearchParam>();
79 searchParams.add(this.builderSearchParam(productInfoInEs, Arrays.asList(productSkn), pageSize)); 67 searchParams.add(this.builderSearchParam(productInfoInEs, Arrays.asList(productSkn), pageSize));
80 68
81 - // 6、获取搜索结果[截取条数] 69 + // 5、获取搜索结果[截取条数]
82 List<Map<String, Object>> tempProductList = searchLikeHelper.queryProductList(searchParams); 70 List<Map<String, Object>> tempProductList = searchLikeHelper.queryProductList(searchParams);
83 if (tempProductList.size() > pageSize) { 71 if (tempProductList.size() > pageSize) {
84 tempProductList = tempProductList.subList(0, pageSize); 72 tempProductList = tempProductList.subList(0, pageSize);
85 } 73 }
86 74
87 - // 7、构造真实返回结果 75 + // 6、构造真实返回结果
88 List<Map<String, Object>> productListResults = new ArrayList<Map<String, Object>>(); 76 List<Map<String, Object>> productListResults = new ArrayList<Map<String, Object>>();
89 if (!tempProductList.isEmpty()) { 77 if (!tempProductList.isEmpty()) {
90 productListResults = productIndexBaseService.getProductListWithPricePlan(tempProductList); 78 productListResults = productIndexBaseService.getProductListWithPricePlan(tempProductList);
@@ -96,9 +84,6 @@ public class SearchLikeInShopService extends AbstractCacheAbleService { @@ -96,9 +84,6 @@ public class SearchLikeInShopService extends AbstractCacheAbleService {
96 result.put("total", productListResults.size()); 84 result.put("total", productListResults.size());
97 result.put("product_info", searchLikeHelper.genProductInfoResult(productInfoInEs)); 85 result.put("product_info", searchLikeHelper.genProductInfoResult(productInfoInEs));
98 result.put("product_list", productListResults); 86 result.put("product_list", productListResults);
99 -  
100 - // 8、结果加入缓存  
101 - searchCacheService.addJSONObjectToCache(this.searchCache, redisCacheKey, result);  
102 return new SearchApiResult().setData(result); 87 return new SearchApiResult().setData(result);
103 } catch (Exception e) { 88 } catch (Exception e) {
104 logger.error(e.getMessage(), e); 89 logger.error(e.getMessage(), e);
@@ -18,13 +18,12 @@ import org.springframework.beans.factory.annotation.Autowired; @@ -18,13 +18,12 @@ import org.springframework.beans.factory.annotation.Autowired;
18 import org.springframework.stereotype.Service; 18 import org.springframework.stereotype.Service;
19 19
20 import com.alibaba.fastjson.JSONObject; 20 import com.alibaba.fastjson.JSONObject;
21 -import com.yoho.search.common.cache.model.SearchCache; 21 +import com.yoho.search.common.cache.aop.SearchCacheAble;
22 import com.yoho.search.core.es.model.SearchParam; 22 import com.yoho.search.core.es.model.SearchParam;
23 import com.yoho.search.models.SearchApiResult; 23 import com.yoho.search.models.SearchApiResult;
24 import com.yoho.search.service.base.SearchDynamicConfigService; 24 import com.yoho.search.service.base.SearchDynamicConfigService;
25 import com.yoho.search.service.base.SearchRequestParams; 25 import com.yoho.search.service.base.SearchRequestParams;
26 import com.yoho.search.service.base.index.ProductIndexBaseService; 26 import com.yoho.search.service.base.index.ProductIndexBaseService;
27 -import com.yoho.search.service.scene.common.AbstractCacheAbleService;  
28 27
29 /** 28 /**
30 * 店铺外找相似 29 * 店铺外找相似
@@ -33,7 +32,7 @@ import com.yoho.search.service.scene.common.AbstractCacheAbleService; @@ -33,7 +32,7 @@ import com.yoho.search.service.scene.common.AbstractCacheAbleService;
33 * 32 *
34 */ 33 */
35 @Service 34 @Service
36 -public class SearchLikeNotInShopService extends AbstractCacheAbleService { 35 +public class SearchLikeNotInShopService{
37 36
38 private static final Logger logger = LoggerFactory.getLogger(SearchLikeNotInShopService.class); 37 private static final Logger logger = LoggerFactory.getLogger(SearchLikeNotInShopService.class);
39 38
@@ -44,17 +43,13 @@ public class SearchLikeNotInShopService extends AbstractCacheAbleService { @@ -44,17 +43,13 @@ public class SearchLikeNotInShopService extends AbstractCacheAbleService {
44 @Autowired 43 @Autowired
45 private SearchDynamicConfigService searchDynamicConfigService; 44 private SearchDynamicConfigService searchDynamicConfigService;
46 45
47 - @Override  
48 - public SearchCache getSearchCache() {  
49 - return searchCacheFactory.getSearchLikeSearchCache();  
50 - }  
51 -  
52 /** 46 /**
53 * 店铺外推荐 47 * 店铺外推荐
54 * 48 *
55 * @param paramMap 49 * @param paramMap
56 * @return 50 * @return
57 */ 51 */
  52 + @SearchCacheAble(cacheInMinute = 600, cacheName = "SEARCH_LIKE_NOT_IN_SHOP", includeParams = { "product_skn", "viewNum" })
58 public SearchApiResult searchLikeNotInShop(Map<String, String> paramMap) { 53 public SearchApiResult searchLikeNotInShop(Map<String, String> paramMap) {
59 try { 54 try {
60 // 1、获取参数 55 // 1、获取参数
@@ -65,32 +60,25 @@ public class SearchLikeNotInShopService extends AbstractCacheAbleService { @@ -65,32 +60,25 @@ public class SearchLikeNotInShopService extends AbstractCacheAbleService {
65 // 2、检测分页参数【默认30条,最多60条】 60 // 2、检测分页参数【默认30条,最多60条】
66 int pageSize = searchLikeHelper.getPageSize(paramMap); 61 int pageSize = searchLikeHelper.getPageSize(paramMap);
67 62
68 - // 3、从缓存中获取,找到则直接返回  
69 - String redisCacheKey = searchCacheKeyHelper.getSearchLikeNotInShopKeyCache(productSkn, pageSize);  
70 - JSONObject cacheObject = searchCacheService.getJSONObjectFromCache(this.searchCache, redisCacheKey);  
71 - if (cacheObject != null) {  
72 - return new SearchApiResult().setData(cacheObject);  
73 - }  
74 -  
75 - // 4、获取当前查询的SKN的基本信息 63 + // 2、获取当前查询的SKN的基本信息
76 JSONObject productInfoInEs = searchLikeHelper.getProductInfoInEs(productSkn); 64 JSONObject productInfoInEs = searchLikeHelper.getProductInfoInEs(productSkn);
77 if (productInfoInEs == null) { 65 if (productInfoInEs == null) {
78 return new SearchApiResult().setCode(400).setMessage("SKN不存在"); 66 return new SearchApiResult().setCode(400).setMessage("SKN不存在");
79 } 67 }
80 68
81 - // 5、设置SearchParams 69 + // 3、设置SearchParams
82 List<SearchParam> searchParams = new ArrayList<SearchParam>(); 70 List<SearchParam> searchParams = new ArrayList<SearchParam>();
83 int sameSortCount = searchDynamicConfigService.getSearchLikeNotInShopSameSortPercent() * pageSize / 100; 71 int sameSortCount = searchDynamicConfigService.getSearchLikeNotInShopSameSortPercent() * pageSize / 100;
84 searchParams.add(this.builderSearchParam(productInfoInEs, Arrays.asList(productSkn), sameSortCount, true)); 72 searchParams.add(this.builderSearchParam(productInfoInEs, Arrays.asList(productSkn), sameSortCount, true));
85 searchParams.add(this.builderSearchParam(productInfoInEs, Arrays.asList(productSkn), pageSize - sameSortCount, false)); 73 searchParams.add(this.builderSearchParam(productInfoInEs, Arrays.asList(productSkn), pageSize - sameSortCount, false));
86 74
87 - // 6、获取搜索结果[截取条数] 75 + // 4、获取搜索结果[截取条数]
88 List<Map<String, Object>> tempProductList = searchLikeHelper.queryProductList(searchParams); 76 List<Map<String, Object>> tempProductList = searchLikeHelper.queryProductList(searchParams);
89 if (tempProductList.size() > pageSize) { 77 if (tempProductList.size() > pageSize) {
90 tempProductList = tempProductList.subList(0, pageSize); 78 tempProductList = tempProductList.subList(0, pageSize);
91 } 79 }
92 80
93 - // 7、构造真实返回结果 81 + // 5、构造真实返回结果
94 List<Map<String, Object>> productListResults = new ArrayList<Map<String, Object>>(); 82 List<Map<String, Object>> productListResults = new ArrayList<Map<String, Object>>();
95 if (!tempProductList.isEmpty()) { 83 if (!tempProductList.isEmpty()) {
96 productListResults = productIndexBaseService.getProductListWithPricePlan(tempProductList); 84 productListResults = productIndexBaseService.getProductListWithPricePlan(tempProductList);
@@ -102,17 +90,14 @@ public class SearchLikeNotInShopService extends AbstractCacheAbleService { @@ -102,17 +90,14 @@ public class SearchLikeNotInShopService extends AbstractCacheAbleService {
102 result.put("total", productListResults.size()); 90 result.put("total", productListResults.size());
103 result.put("product_info", searchLikeHelper.genProductInfoResult(productInfoInEs)); 91 result.put("product_info", searchLikeHelper.genProductInfoResult(productInfoInEs));
104 result.put("product_list", productListResults); 92 result.put("product_list", productListResults);
105 -  
106 // 8、结果加入缓存 93 // 8、结果加入缓存
107 - searchCacheService.addJSONObjectToCache(this.searchCache, redisCacheKey, result);  
108 return new SearchApiResult().setData(result); 94 return new SearchApiResult().setData(result);
109 } catch (Exception e) { 95 } catch (Exception e) {
110 logger.error(e.getMessage(), e); 96 logger.error(e.getMessage(), e);
111 return new SearchApiResult().setData(null).setMessage("searchLikeNotInShop Exception").setCode(500); 97 return new SearchApiResult().setData(null).setMessage("searchLikeNotInShop Exception").setCode(500);
112 } 98 }
113 -  
114 } 99 }
115 - 100 +
116 private SearchParam builderSearchParam(JSONObject productInfoInEs, List<String> productSkns, int pageSize, boolean inSameSort) { 101 private SearchParam builderSearchParam(JSONObject productInfoInEs, List<String> productSkns, int pageSize, boolean inSameSort) {
117 // 1、设置SearchParam 102 // 1、设置SearchParam
118 SearchParam searchParam = new SearchParam(); 103 SearchParam searchParam = new SearchParam();
@@ -19,12 +19,11 @@ import org.springframework.stereotype.Service; @@ -19,12 +19,11 @@ import org.springframework.stereotype.Service;
19 19
20 import com.alibaba.fastjson.JSONObject; 20 import com.alibaba.fastjson.JSONObject;
21 import com.yoho.search.base.utils.ProductIndexEsField; 21 import com.yoho.search.base.utils.ProductIndexEsField;
22 -import com.yoho.search.common.cache.model.SearchCache; 22 +import com.yoho.search.common.cache.aop.SearchCacheAble;
23 import com.yoho.search.core.es.model.SearchParam; 23 import com.yoho.search.core.es.model.SearchParam;
24 import com.yoho.search.models.SearchApiResult; 24 import com.yoho.search.models.SearchApiResult;
25 import com.yoho.search.service.base.SearchRequestParams; 25 import com.yoho.search.service.base.SearchRequestParams;
26 import com.yoho.search.service.base.index.ProductIndexBaseService; 26 import com.yoho.search.service.base.index.ProductIndexBaseService;
27 -import com.yoho.search.service.scene.common.AbstractCacheAbleService;  
28 27
29 /** 28 /**
30 * 全站找相似功能 29 * 全站找相似功能
@@ -33,7 +32,7 @@ import com.yoho.search.service.scene.common.AbstractCacheAbleService; @@ -33,7 +32,7 @@ import com.yoho.search.service.scene.common.AbstractCacheAbleService;
33 * 32 *
34 */ 33 */
35 @Service 34 @Service
36 -public class SearchLikeSceneService extends AbstractCacheAbleService { 35 +public class SearchLikeSceneService {
37 36
38 private static final Logger logger = LoggerFactory.getLogger(SearchLikeSceneService.class); 37 private static final Logger logger = LoggerFactory.getLogger(SearchLikeSceneService.class);
39 38
@@ -42,14 +41,10 @@ public class SearchLikeSceneService extends AbstractCacheAbleService { @@ -42,14 +41,10 @@ public class SearchLikeSceneService extends AbstractCacheAbleService {
42 @Autowired 41 @Autowired
43 private ProductIndexBaseService productIndexBaseService; 42 private ProductIndexBaseService productIndexBaseService;
44 43
45 - @Override  
46 - public SearchCache getSearchCache() {  
47 - return searchCacheFactory.getSearchLikeSearchCache();  
48 - }  
49 -  
50 /** 44 /**
51 - * @找相似功能 45 + * @全站找相似功能
52 */ 46 */
  47 + @SearchCacheAble(cacheInMinute = 600, cacheName = "SEARCH_LIKE", includeParams = { "product_skn", "viewNum" })
53 public SearchApiResult searchLike(Map<String, String> paramMap) { 48 public SearchApiResult searchLike(Map<String, String> paramMap) {
54 try { 49 try {
55 // 1、获取参数 50 // 1、获取参数
@@ -60,33 +55,26 @@ public class SearchLikeSceneService extends AbstractCacheAbleService { @@ -60,33 +55,26 @@ public class SearchLikeSceneService extends AbstractCacheAbleService {
60 // 2、检测分页参数【默认30条,最多60条】 55 // 2、检测分页参数【默认30条,最多60条】
61 int pageSize = searchLikeHelper.getPageSize(paramMap); 56 int pageSize = searchLikeHelper.getPageSize(paramMap);
62 57
63 - // 3、从缓存中获取,找到则直接返回  
64 - String redisCacheKey = searchCacheKeyHelper.getSearchLikeKeyCache(productSkn, pageSize);  
65 - JSONObject cacheObject = searchCacheService.getJSONObjectFromCache(this.searchCache, redisCacheKey);  
66 - if (cacheObject != null) {  
67 - return new SearchApiResult().setData(cacheObject);  
68 - }  
69 -  
70 - // 4、获取当前查询的SKN的基本信息 58 + // 3、获取当前查询的SKN的基本信息
71 JSONObject productInfoInEs = searchLikeHelper.getProductInfoInEs(productSkn); 59 JSONObject productInfoInEs = searchLikeHelper.getProductInfoInEs(productSkn);
72 if (productInfoInEs == null) { 60 if (productInfoInEs == null) {
73 return new SearchApiResult().setCode(400).setMessage("SKN不存在"); 61 return new SearchApiResult().setCode(400).setMessage("SKN不存在");
74 } 62 }
75 63
76 - // 5、设置第一步SearchParam 64 + // 4、设置第一步SearchParam
77 String isGlobalInEs = productInfoInEs.getString("isGlobal"); 65 String isGlobalInEs = productInfoInEs.getString("isGlobal");
78 boolean isGlobal = "Y".equalsIgnoreCase(isGlobalInEs); 66 boolean isGlobal = "Y".equalsIgnoreCase(isGlobalInEs);
79 List<SearchParam> searchParams = new ArrayList<SearchParam>(); 67 List<SearchParam> searchParams = new ArrayList<SearchParam>();
80 searchParams.add(this.buildSearchParam(productInfoInEs, 5, true, isGlobal));// 固定取同品牌的5个商品 68 searchParams.add(this.buildSearchParam(productInfoInEs, 5, true, isGlobal));// 固定取同品牌的5个商品
81 searchParams.add(this.buildSearchParam(productInfoInEs, pageSize, false, isGlobal)); 69 searchParams.add(this.buildSearchParam(productInfoInEs, pageSize, false, isGlobal));
82 70
83 - // 6、获取搜索结果[并截取条数] 71 + // 5、获取搜索结果[并截取条数]
84 List<Map<String, Object>> tempProductList = searchLikeHelper.queryProductList(searchParams); 72 List<Map<String, Object>> tempProductList = searchLikeHelper.queryProductList(searchParams);
85 if (tempProductList.size() > pageSize) { 73 if (tempProductList.size() > pageSize) {
86 tempProductList = tempProductList.subList(0, pageSize); 74 tempProductList = tempProductList.subList(0, pageSize);
87 } 75 }
88 76
89 - // 7、构造真实返回结果 77 + // 6、构造真实返回结果
90 List<Map<String, Object>> productListResults = new ArrayList<Map<String, Object>>(); 78 List<Map<String, Object>> productListResults = new ArrayList<Map<String, Object>>();
91 if (!tempProductList.isEmpty()) { 79 if (!tempProductList.isEmpty()) {
92 productListResults = productIndexBaseService.getProductListWithPricePlan(tempProductList); 80 productListResults = productIndexBaseService.getProductListWithPricePlan(tempProductList);
@@ -98,9 +86,6 @@ public class SearchLikeSceneService extends AbstractCacheAbleService { @@ -98,9 +86,6 @@ public class SearchLikeSceneService extends AbstractCacheAbleService {
98 jsonObject.put("total", productListResults.size()); 86 jsonObject.put("total", productListResults.size());
99 jsonObject.put("product_info", searchLikeHelper.genProductInfoResult(productInfoInEs)); 87 jsonObject.put("product_info", searchLikeHelper.genProductInfoResult(productInfoInEs));
100 jsonObject.put("product_list", productListResults); 88 jsonObject.put("product_list", productListResults);
101 -  
102 - // 8、结果加入缓存  
103 - searchCacheService.addJSONObjectToCache(this.searchCache, redisCacheKey, jsonObject);  
104 return new SearchApiResult().setData(jsonObject); 89 return new SearchApiResult().setData(jsonObject);
105 } catch (Exception e) { 90 } catch (Exception e) {
106 logger.error(e.getMessage(), e); 91 logger.error(e.getMessage(), e);