Authored by hugufei

移包

1 -package com.yoho.search.recall.scene.beans;  
2 -  
3 -import com.alibaba.fastjson.JSON;  
4 -import com.yoho.core.redis.cluster.operations.serializer.RedisKeyBuilder;  
5 -import com.yoho.search.base.utils.Transfer;  
6 -import com.yoho.search.recall.scene.cache.CacheRequestResponse;  
7 -import com.yoho.search.recall.scene.models.RecallRequest;  
8 -import com.yoho.search.recall.scene.models.RecallResponse;  
9 -  
10 -public class CacheRecallRequestResponse extends CacheRequestResponse<RecallRequest,RecallResponse> {  
11 -  
12 - public CacheRecallRequestResponse(RecallRequest request) {  
13 - super(request);  
14 - }  
15 -  
16 - @Override  
17 - public Transfer<String, RecallResponse> getToResponseTransfer() {  
18 - return toResponseTransfer;  
19 - }  
20 -  
21 - @Override  
22 - public Transfer<RecallResponse, String> getFromResponseTransfer() {  
23 - return fromResponseTransfer;  
24 - }  
25 -  
26 - private static Transfer<String,RecallResponse> toResponseTransfer = new Transfer<String, RecallResponse>() {  
27 - @Override  
28 - public RecallResponse transfer(String jsonValue) {  
29 - return JSON.parseObject(jsonValue, RecallResponse.class);  
30 - }  
31 - };  
32 -  
33 - private static Transfer<RecallResponse,String> fromResponseTransfer = new Transfer<RecallResponse, String>() {  
34 - @Override  
35 - public String transfer(RecallResponse recallResponse) {  
36 - return JSON.toJSONString(recallResponse);  
37 - }  
38 - };  
39 -}  
1 -package com.yoho.search.recall.scene.beans;  
2 -  
3 -import com.yoho.search.base.utils.ISearchConstants;  
4 -import com.yoho.search.base.utils.ProductIndexEsField;  
5 -import com.yoho.search.core.es.model.SearchParam;  
6 -import com.yoho.search.core.es.model.SearchResult;  
7 -import com.yoho.search.recall.scene.cache.CacheRequestResponseComponent;  
8 -import com.yoho.search.recall.scene.models.RecallRequest;  
9 -import com.yoho.search.recall.scene.models.RecallResponse;  
10 -import com.yoho.search.recall.scene.models.RecallSknParams;  
11 -import com.yoho.search.recall.scene.models.RecallSknResult;  
12 -import com.yoho.search.service.base.SearchCommonService;  
13 -import org.apache.commons.collections.MapUtils;  
14 -import org.slf4j.Logger;  
15 -import org.slf4j.LoggerFactory;  
16 -import org.springframework.beans.factory.annotation.Autowired;  
17 -import org.springframework.stereotype.Component;  
18 -  
19 -import java.util.ArrayList;  
20 -import java.util.HashMap;  
21 -import java.util.List;  
22 -import java.util.Map;  
23 -  
24 -@Component  
25 -public class CacheRecallRequestResponseBean extends CacheRequestResponseComponent<RecallRequest,RecallResponse,CacheRecallRequestResponse>{  
26 -  
27 - @Autowired  
28 - private SearchCommonService searchCommonService;  
29 -  
30 - private static final int maxEsRequestCountPerTime = 10;  
31 -  
32 - /**  
33 - * 批量召回入口  
34 - *  
35 - * @param batchRequests  
36 - * @return  
37 - */  
38 - public List<CacheRecallRequestResponse> batchRecallAndCache(final List<RecallRequest> batchRequests) {  
39 - //1、构造请求  
40 - final List<CacheRecallRequestResponse> results = new ArrayList<>();  
41 - for (RecallRequest request : batchRequests) {  
42 - results.add(new CacheRecallRequestResponse(request));  
43 - }  
44 - //2、执行查询  
45 - this.bacthFillResponseWithCache(results,false);  
46 -  
47 - //3、返回结果  
48 - return results;  
49 - }  
50 -  
51 - @Override  
52 - public Map<RecallRequest, RecallResponse> queryMissCacheRequestResults(List<CacheRecallRequestResponse> missCacheRequests) {  
53 - //1、构造请求参数  
54 - List<SearchParam> searchParams = new ArrayList<>();  
55 - for (CacheRecallRequestResponse requestResponse : missCacheRequests) {  
56 - searchParams.add(requestResponse.getRequest().searchParam());  
57 - //控制每次请求es的数量  
58 - if(searchParams.size()>=maxEsRequestCountPerTime){  
59 - break;  
60 - }  
61 - }  
62 - //2、执行搜索  
63 - List<SearchResult> searchResults = searchCommonService.doMutiSearch(ISearchConstants.INDEX_NAME_PRODUCT_INDEX, searchParams);  
64 - //3、构造返回结果  
65 - Map<RecallRequest,RecallResponse> notCachedResults = new HashMap<>();  
66 - for (int i = 0; i < missCacheRequests.size(); i++) {  
67 - RecallRequest request = missCacheRequests.get(i).getRequest();  
68 - SearchResult searchResult = searchResults.get(i);  
69 - RecallResponse response = this.buildResonse(searchResult);  
70 - notCachedResults.put(request,response);  
71 - }  
72 - return notCachedResults;  
73 - }  
74 -  
75 - private RecallResponse buildResonse(SearchResult searchResult) {  
76 - List<Map<String, Object>> results = searchResult.getResultList();  
77 - List<RecallResponse.RecallSkn> recallSkns = new ArrayList<>();  
78 - for (Map<String, Object> result : results) {  
79 - Integer productSkn = MapUtils.getInteger(result, ProductIndexEsField.productSkn, 0);  
80 - Integer brandId = MapUtils.getInteger(result, ProductIndexEsField.brandId, 0);  
81 - Integer middleSortId = MapUtils.getInteger(result, ProductIndexEsField.middleSortId, 0);  
82 - recallSkns.add(new RecallResponse.RecallSkn(productSkn, brandId, middleSortId));  
83 - }  
84 - return new RecallResponse(searchResult.getTotal(), recallSkns);  
85 - }  
86 -  
87 -}  
1 -package com.yoho.search.recall.scene.beans;  
2 -  
3 -import com.alibaba.fastjson.JSON;  
4 -import com.yoho.search.base.utils.Transfer;  
5 -import com.yoho.search.recall.scene.cache.CacheRequestResponse;  
6 -import com.yoho.search.recall.scene.models.RecallSknParams;  
7 -import com.yoho.search.recall.scene.models.RecallSknResult;  
8 -  
9 -public class CacheRecallSknRequestResponse extends CacheRequestResponse<RecallSknParams,RecallSknResult> {  
10 -  
11 - public CacheRecallSknRequestResponse(RecallSknParams request) {  
12 - super(request);  
13 - }  
14 -  
15 - private static Transfer<String,RecallSknResult> toResponseTransfer = new Transfer<String, RecallSknResult>() {  
16 - @Override  
17 - public RecallSknResult transfer(String jsonValue) {  
18 - return JSON.parseObject(jsonValue, RecallSknResult.class);  
19 - }  
20 - };  
21 -  
22 - private static Transfer<RecallSknResult,String> fromResponseTransfer = new Transfer<RecallSknResult, String>() {  
23 - @Override  
24 - public String transfer(RecallSknResult recallSknResult) {  
25 - return JSON.toJSONString(recallSknResult);  
26 - }  
27 - };  
28 -  
29 - @Override  
30 - public Transfer<String, RecallSknResult> getToResponseTransfer() {  
31 - return toResponseTransfer;  
32 - }  
33 -  
34 - @Override  
35 - public Transfer<RecallSknResult, String> getFromResponseTransfer() {  
36 - return fromResponseTransfer;  
37 - }  
38 -}  
1 -package com.yoho.search.recall.scene.beans;  
2 -  
3 -import com.yoho.search.recall.scene.builder.request.BrandRecallRequestBuilder;  
4 -import com.yoho.search.recall.scene.builder.request.CommonRecallRequestBuilder;  
5 -import com.yoho.search.recall.scene.builder.request.SortPriceRecallRequestBuilder;  
6 -import com.yoho.search.recall.scene.builder.response.RecallResponseBatchBuilder;  
7 -import com.yoho.search.recall.scene.builder.response.RecallSknResultBuilder;  
8 -import com.yoho.search.recall.scene.cache.CacheRequestResponseComponent;  
9 -import com.yoho.search.recall.scene.models.RecallRequest;  
10 -import com.yoho.search.recall.scene.models.RecallResponseBatch;  
11 -import com.yoho.search.recall.scene.models.RecallSknParams;  
12 -import com.yoho.search.recall.scene.models.RecallSknResult;  
13 -import com.yoho.search.recall.scene.persional.PersionalFactor;  
14 -import com.yoho.search.recall.scene.persional.RecallPersionalService;  
15 -import org.springframework.beans.factory.annotation.Autowired;  
16 -import org.springframework.stereotype.Component;  
17 -  
18 -import java.util.ArrayList;  
19 -import java.util.HashMap;  
20 -import java.util.List;  
21 -import java.util.Map;  
22 -  
23 -@Component  
24 -public class CacheRecallSknRequestResponseBean extends CacheRequestResponseComponent<RecallSknParams,RecallSknResult,CacheRecallSknRequestResponse>{  
25 -  
26 - @Autowired  
27 - private RecallPersionalService recallPersionalService;  
28 - @Autowired  
29 - private CacheRecallRequestResponseBean cacheRecallRequestResponseBean;  
30 - @Autowired  
31 - private RecallResponseBatchBuilder recallResponseBatchBuilder;  
32 - @Autowired  
33 - private RecallSknResultBuilder recallSknResultBuilder;  
34 - @Autowired  
35 - private CommonRecallRequestBuilder commonRequestBuilder;  
36 - @Autowired  
37 - private BrandRecallRequestBuilder brandRequestBuilder;  
38 - @Autowired  
39 - private SortPriceRecallRequestBuilder sortPriceRequestBuilder;  
40 -  
41 - /**  
42 - * 召回入口  
43 - * @param recallSknParams  
44 - * @return  
45 - */  
46 - public RecallSknResult doRecallSknResult(RecallSknParams recallSknParams){  
47 - //1、构建请求  
48 - List<CacheRecallSknRequestResponse> requests = new ArrayList<>();  
49 - requests.add(new CacheRecallSknRequestResponse(recallSknParams));  
50 -  
51 - //2、执行父类方法  
52 - this.bacthFillResponseWithCache(requests,false);  
53 -  
54 - //3、判断  
55 - if(requests.size()==1 && requests.get(0).getResponse()!=null){  
56 - return requests.get(0).getResponse();  
57 - }  
58 - return null;  
59 - }  
60 -  
61 - @Override  
62 - public Map<RecallSknParams, RecallSknResult> queryMissCacheRequestResults(List<CacheRecallSknRequestResponse> missCachseRequests) {  
63 - Map<RecallSknParams, RecallSknResult> results = new HashMap<>();  
64 - for (CacheRecallSknRequestResponse request: missCachseRequests) {  
65 - RecallSknResult response = this.doRealRecall(request.getRequest());  
66 - results.put(request.getRequest(),response);  
67 - }  
68 - return results;  
69 - }  
70 -  
71 - /**  
72 - * 真正的召回入口  
73 - * @param param  
74 - * @return  
75 - */  
76 - private RecallSknResult doRealRecall(RecallSknParams param) {  
77 - //1、获取个性化因子  
78 - PersionalFactor persionalFactor = recallPersionalService.queryPersionalFactor(param);  
79 - //2、构造请求  
80 - List<RecallRequest> batchRequests = this.buildBatchRequests(param, persionalFactor);  
81 - //3、批量召回  
82 - List<CacheRecallRequestResponse> requestResponses = cacheRecallRequestResponseBean.batchRecallAndCache(batchRequests);  
83 - //4、获取skn列表[去重]  
84 - RecallResponseBatch recallResponseBatch = recallResponseBatchBuilder.buildRecallResponseBatch(requestResponses);  
85 - //5、构造真实结果[排序,截取skn]  
86 - RecallSknResult recallSknResult = recallSknResultBuilder.builderRecallResult(recallResponseBatch, param, persionalFactor);  
87 - return recallSknResult;  
88 - }  
89 -  
90 - /**  
91 - * 批量构造请求  
92 - * @param param  
93 - * @param persionalFactor  
94 - * @return  
95 - */  
96 - private List<RecallRequest> buildBatchRequests(RecallSknParams param, PersionalFactor persionalFactor) {  
97 - //1、构造召回请求  
98 - List<RecallRequest> allRequests = new ArrayList<>();  
99 - //2、构造非个性化的请求  
100 - List<RecallRequest> commonRequests = commonRequestBuilder.buildCommonRecallRequests(param.getParamQueryFilter(), param.getFirstProductSkns());  
101 - allRequests.addAll(commonRequests);  
102 - //4、构建个性化品牌的召回请求  
103 - List<RecallRequest> brandRequests = brandRequestBuilder.buildBrandRecallRequests(param.getParamQueryFilter(), persionalFactor.getBrandIds());  
104 - allRequests.addAll(brandRequests);  
105 - //5、构建个性化品牌的召回请求  
106 - List<RecallRequest> sortPriceRequests = sortPriceRequestBuilder.buildSortPriceRecallRequests(param.getParamQueryFilter(), persionalFactor.getSortPriceAreas());  
107 - allRequests.addAll(sortPriceRequests);  
108 - return allRequests;  
109 - }  
110 -  
111 -  
112 -}  
1 -package com.yoho.search.recall.scene.beans;  
2 -  
3 -import com.alibaba.fastjson.JSON;  
4 -import com.alibaba.fastjson.JSONObject;  
5 -import com.yoho.core.redis.cluster.operations.serializer.RedisKeyBuilder;  
6 -import com.yoho.search.base.utils.Transfer;  
7 -import com.yoho.search.recall.scene.cache.CacheRequestResponse;  
8 -import com.yoho.search.recall.scene.models.SknInfoRequest;  
9 -  
10 -import java.util.HashMap;  
11 -import java.util.Map;  
12 -  
13 -public class CacheSknInfoRequestResponse extends CacheRequestResponse<SknInfoRequest, Map<String, Object>> {  
14 -  
15 - public CacheSknInfoRequestResponse(SknInfoRequest sknInfoRequest) {  
16 - super(sknInfoRequest);  
17 - }  
18 -  
19 - static Transfer<String, Map<String, Object>> toResponseTransfer = new Transfer<String, Map<String, Object>>() {  
20 - @Override  
21 - public Map<String, Object> transfer(String value) {  
22 - Map<String, Object> product = new HashMap<>();  
23 - product.putAll(JSONObject.parseObject(value));  
24 - return product;  
25 - }  
26 - };  
27 -  
28 - static Transfer<Map<String, Object>, String> fromResponseTransfer = new Transfer<Map<String, Object>, String>() {  
29 - @Override  
30 - public String transfer(Map<String, Object> product) {  
31 - return JSON.toJSONString(product);  
32 - }  
33 - };  
34 -  
35 - @Override  
36 - public Transfer<String, Map<String, Object>> getToResponseTransfer() {  
37 - return toResponseTransfer;  
38 - }  
39 -  
40 - @Override  
41 - public Transfer<Map<String, Object>, String> getFromResponseTransfer() {  
42 - return fromResponseTransfer;  
43 - }  
44 -}  
1 -package com.yoho.search.recall.scene.beans;  
2 -  
3 -  
4 -import com.yoho.search.base.utils.ISearchConstants;  
5 -import com.yoho.search.base.utils.ProductIndexEsField;  
6 -import com.yoho.search.core.es.model.SearchParam;  
7 -import com.yoho.search.core.es.model.SearchResult;  
8 -import com.yoho.search.recall.scene.cache.CacheRequestResponseComponent;  
9 -import com.yoho.search.recall.scene.models.RecallSknParams;  
10 -import com.yoho.search.recall.scene.models.RecallSknResult;  
11 -import com.yoho.search.recall.scene.models.SknInfoRequest;  
12 -import com.yoho.search.service.base.SearchCommonService;  
13 -import com.yoho.search.service.base.index.ProductIndexBaseService;  
14 -import org.apache.commons.collections.MapUtils;  
15 -import org.elasticsearch.index.query.QueryBuilders;  
16 -import org.springframework.beans.factory.annotation.Autowired;  
17 -import org.springframework.stereotype.Component;  
18 -  
19 -import java.util.ArrayList;  
20 -import java.util.HashMap;  
21 -import java.util.List;  
22 -import java.util.Map;  
23 -  
24 -@Component  
25 -public class CacheSknInfoRequestResponseBean extends CacheRequestResponseComponent<SknInfoRequest,Map<String, Object>,CacheSknInfoRequestResponse>{  
26 -  
27 - @Autowired  
28 - private SearchCommonService searchCommonService;  
29 - @Autowired  
30 - private ProductIndexBaseService productIndexBaseService;  
31 -  
32 - /**  
33 - * 按skn查询并按顺序返回  
34 - *  
35 - * @param productSkns  
36 - * @return  
37 - */  
38 - public List<Map<String, Object>> queryProductListBySkn(List<Integer> productSkns,int size){  
39 - //1、批量查询SKN信息  
40 - List<CacheSknInfoRequestResponse> sknInfoCacheRequestRespons = this.batchQuery(productSkns);  
41 - //2、构造返回结果  
42 - List<Map<String, Object>> finalResults = new ArrayList<>();  
43 - for (CacheSknInfoRequestResponse sknInfoCacheRequestResponse : sknInfoCacheRequestRespons) {  
44 - if(sknInfoCacheRequestResponse !=null && sknInfoCacheRequestResponse.getResponse()!=null){  
45 - finalResults.add(sknInfoCacheRequestResponse.getResponse());  
46 - }  
47 - if(finalResults.size()>=size){  
48 - break;  
49 - }  
50 - }  
51 - return finalResults;  
52 - }  
53 -  
54 - private List<CacheSknInfoRequestResponse> batchQuery(List<Integer> productSkns){  
55 - //1、构建请求与返回结果  
56 - final List<CacheSknInfoRequestResponse> requests = new ArrayList<>();  
57 - for (Integer productSkn : productSkns) {  
58 - requests.add(new CacheSknInfoRequestResponse(new SknInfoRequest(productSkn)));  
59 - }  
60 - //2、调父类方法  
61 - this.bacthFillResponseWithCache(requests,true);  
62 -  
63 - //3、返回结果  
64 - return requests;  
65 - }  
66 -  
67 - @Override  
68 - public Map<SknInfoRequest, Map<String, Object>> queryMissCacheRequestResults(List<CacheSknInfoRequestResponse> missCacheRequests) {  
69 - //1、合法性判断  
70 - Map<SknInfoRequest,Map<String, Object>> results = new HashMap<>();  
71 - if(missCacheRequests==null||missCacheRequests.isEmpty()){  
72 - return results;  
73 - }  
74 - //2、获取skn  
75 - List<Integer> productSkns = new ArrayList<>();  
76 - for (CacheSknInfoRequestResponse sknInfoCacheRequestResponse : missCacheRequests) {  
77 - productSkns.add(sknInfoCacheRequestResponse.getRequest().getProductSkn());  
78 - }  
79 - //3、构建SearchParam  
80 - SearchParam searchParam = new SearchParam();  
81 - searchParam.setOffset(0);  
82 - searchParam.setSize(productSkns.size());  
83 - searchParam.setFiter(QueryBuilders.termsQuery(ProductIndexEsField.productSkn, productSkns));  
84 - searchParam.setIncludeFields(productIndexBaseService.getProductIndexIncludeFields());  
85 - SearchResult searchResult = searchCommonService.doSearch(ISearchConstants.INDEX_NAME_PRODUCT_INDEX, searchParam);  
86 - List<Map<String, Object>> productList = productIndexBaseService.getProductListWithPricePlan(searchResult.getResultList());  
87 - //4、构建SKN临时结果  
88 - Map<Integer,Map<String, Object>> productTempMap = new HashMap<>();  
89 - for (Map<String, Object> product: productList) {  
90 - productTempMap.put(MapUtils.getIntValue(product,"product_skn",0),product);  
91 - }  
92 - //5、构造最终结果  
93 - for (CacheSknInfoRequestResponse requestResponse :missCacheRequests ) {  
94 - results.put(requestResponse.getRequest(),productTempMap.get(requestResponse.getRequest().getProductSkn()));  
95 - }  
96 - return results;  
97 - }  
98 -  
99 -  
100 -  
101 -  
102 -  
103 -  
104 -}  
1 -package com.yoho.search.recall.scene.cache.beans;  
2 -  
3 -import com.alibaba.fastjson.JSON;  
4 -import com.yoho.core.redis.cluster.operations.serializer.RedisKeyBuilder;  
5 -import com.yoho.search.base.utils.Transfer;  
6 -import com.yoho.search.recall.scene.cache.CacheRequestResponse;  
7 -import com.yoho.search.recall.scene.models.RecallRequest;  
8 -import com.yoho.search.recall.scene.models.RecallResponse;  
9 -  
10 -public class CacheRecallRequestResponse extends CacheRequestResponse<RecallRequest,RecallResponse> {  
11 -  
12 - public CacheRecallRequestResponse(RecallRequest request) {  
13 - super(request);  
14 - }  
15 -  
16 - @Override  
17 - public Transfer<String, RecallResponse> getToResponseTransfer() {  
18 - return toResponseTransfer;  
19 - }  
20 -  
21 - @Override  
22 - public Transfer<RecallResponse, String> getFromResponseTransfer() {  
23 - return fromResponseTransfer;  
24 - }  
25 -  
26 - private static Transfer<String,RecallResponse> toResponseTransfer = new Transfer<String, RecallResponse>() {  
27 - @Override  
28 - public RecallResponse transfer(String jsonValue) {  
29 - return JSON.parseObject(jsonValue, RecallResponse.class);  
30 - }  
31 - };  
32 -  
33 - private static Transfer<RecallResponse,String> fromResponseTransfer = new Transfer<RecallResponse, String>() {  
34 - @Override  
35 - public String transfer(RecallResponse recallResponse) {  
36 - return JSON.toJSONString(recallResponse);  
37 - }  
38 - };  
39 -} 1 +package com.yoho.search.recall.scene.cache.beans;
  2 +
  3 +import com.alibaba.fastjson.JSON;
  4 +import com.yoho.core.redis.cluster.operations.serializer.RedisKeyBuilder;
  5 +import com.yoho.search.base.utils.Transfer;
  6 +import com.yoho.search.recall.scene.cache.CacheRequestResponse;
  7 +import com.yoho.search.recall.scene.models.RecallRequest;
  8 +import com.yoho.search.recall.scene.models.RecallResponse;
  9 +
  10 +public class CacheRecallRequestResponse extends CacheRequestResponse<RecallRequest,RecallResponse> {
  11 +
  12 + public CacheRecallRequestResponse(RecallRequest request) {
  13 + super(request);
  14 + }
  15 +
  16 + @Override
  17 + public Transfer<String, RecallResponse> getToResponseTransfer() {
  18 + return toResponseTransfer;
  19 + }
  20 +
  21 + @Override
  22 + public Transfer<RecallResponse, String> getFromResponseTransfer() {
  23 + return fromResponseTransfer;
  24 + }
  25 +
  26 + private static Transfer<String,RecallResponse> toResponseTransfer = new Transfer<String, RecallResponse>() {
  27 + @Override
  28 + public RecallResponse transfer(String jsonValue) {
  29 + return JSON.parseObject(jsonValue, RecallResponse.class);
  30 + }
  31 + };
  32 +
  33 + private static Transfer<RecallResponse,String> fromResponseTransfer = new Transfer<RecallResponse, String>() {
  34 + @Override
  35 + public String transfer(RecallResponse recallResponse) {
  36 + return JSON.toJSONString(recallResponse);
  37 + }
  38 + };
  39 +}
1 -package com.yoho.search.recall.scene.cache.beans;  
2 -  
3 -import com.yoho.search.base.utils.ISearchConstants;  
4 -import com.yoho.search.base.utils.ProductIndexEsField;  
5 -import com.yoho.search.core.es.model.SearchParam;  
6 -import com.yoho.search.core.es.model.SearchResult;  
7 -import com.yoho.search.recall.scene.cache.CacheRequestResponseComponent;  
8 -import com.yoho.search.recall.scene.models.RecallRequest;  
9 -import com.yoho.search.recall.scene.models.RecallResponse;  
10 -import com.yoho.search.service.base.SearchCommonService;  
11 -import org.apache.commons.collections.MapUtils;  
12 -import org.springframework.beans.factory.annotation.Autowired;  
13 -import org.springframework.stereotype.Component;  
14 -  
15 -import java.util.ArrayList;  
16 -import java.util.HashMap;  
17 -import java.util.List;  
18 -import java.util.Map;  
19 -  
20 -@Component  
21 -public class CacheRecallRequestResponseBean extends CacheRequestResponseComponent<RecallRequest,RecallResponse,CacheRecallRequestResponse>{  
22 -  
23 - @Autowired  
24 - private SearchCommonService searchCommonService;  
25 -  
26 - private static final int maxEsRequestCountPerTime = 10;  
27 -  
28 - /**  
29 - * 批量召回入口  
30 - *  
31 - * @param batchRequests  
32 - * @return  
33 - */  
34 - public List<CacheRecallRequestResponse> batchRecallAndCache(final List<RecallRequest> batchRequests) {  
35 - //1、构造请求  
36 - final List<CacheRecallRequestResponse> results = new ArrayList<>();  
37 - for (RecallRequest request : batchRequests) {  
38 - results.add(new CacheRecallRequestResponse(request));  
39 - }  
40 - //2、执行查询  
41 - this.bacthFillResponseWithCache(results,false);  
42 -  
43 - //3、返回结果  
44 - return results;  
45 - }  
46 -  
47 - @Override  
48 - public Map<RecallRequest, RecallResponse> queryMissCacheRequestResults(List<CacheRecallRequestResponse> missCacheRequests) {  
49 - //1、构造请求参数  
50 - List<SearchParam> searchParams = new ArrayList<>();  
51 - for (CacheRecallRequestResponse requestResponse : missCacheRequests) {  
52 - searchParams.add(requestResponse.getRequest().searchParam());  
53 - //控制每次请求es的数量  
54 - if(searchParams.size()>=maxEsRequestCountPerTime){  
55 - break;  
56 - }  
57 - }  
58 - //2、执行搜索  
59 - List<SearchResult> searchResults = searchCommonService.doMutiSearch(ISearchConstants.INDEX_NAME_PRODUCT_INDEX, searchParams);  
60 - //3、构造返回结果  
61 - Map<RecallRequest,RecallResponse> notCachedResults = new HashMap<>();  
62 - for (int i = 0; i < missCacheRequests.size(); i++) {  
63 - RecallRequest request = missCacheRequests.get(i).getRequest();  
64 - SearchResult searchResult = searchResults.get(i);  
65 - RecallResponse response = this.buildResonse(searchResult);  
66 - notCachedResults.put(request,response);  
67 - }  
68 - return notCachedResults;  
69 - }  
70 -  
71 - private RecallResponse buildResonse(SearchResult searchResult) {  
72 - List<Map<String, Object>> results = searchResult.getResultList();  
73 - List<RecallResponse.RecallSkn> recallSkns = new ArrayList<>();  
74 - for (Map<String, Object> result : results) {  
75 - Integer productSkn = MapUtils.getInteger(result, ProductIndexEsField.productSkn, 0);  
76 - Integer brandId = MapUtils.getInteger(result, ProductIndexEsField.brandId, 0);  
77 - Integer middleSortId = MapUtils.getInteger(result, ProductIndexEsField.middleSortId, 0);  
78 - recallSkns.add(new RecallResponse.RecallSkn(productSkn, brandId, middleSortId));  
79 - }  
80 - return new RecallResponse(searchResult.getTotal(), recallSkns);  
81 - }  
82 -  
83 -} 1 +package com.yoho.search.recall.scene.cache.beans;
  2 +
  3 +import com.yoho.search.base.utils.ISearchConstants;
  4 +import com.yoho.search.base.utils.ProductIndexEsField;
  5 +import com.yoho.search.core.es.model.SearchParam;
  6 +import com.yoho.search.core.es.model.SearchResult;
  7 +import com.yoho.search.recall.scene.cache.CacheRequestResponseComponent;
  8 +import com.yoho.search.recall.scene.models.RecallRequest;
  9 +import com.yoho.search.recall.scene.models.RecallResponse;
  10 +import com.yoho.search.service.base.SearchCommonService;
  11 +import org.apache.commons.collections.MapUtils;
  12 +import org.springframework.beans.factory.annotation.Autowired;
  13 +import org.springframework.stereotype.Component;
  14 +
  15 +import java.util.ArrayList;
  16 +import java.util.HashMap;
  17 +import java.util.List;
  18 +import java.util.Map;
  19 +
  20 +@Component
  21 +public class CacheRecallRequestResponseBean extends CacheRequestResponseComponent<RecallRequest,RecallResponse,CacheRecallRequestResponse>{
  22 +
  23 + @Autowired
  24 + private SearchCommonService searchCommonService;
  25 +
  26 + private static final int maxEsRequestCountPerTime = 10;
  27 +
  28 + /**
  29 + * 批量召回入口
  30 + *
  31 + * @param batchRequests
  32 + * @return
  33 + */
  34 + public List<CacheRecallRequestResponse> batchRecallAndCache(final List<RecallRequest> batchRequests) {
  35 + //1、构造请求
  36 + final List<CacheRecallRequestResponse> results = new ArrayList<>();
  37 + for (RecallRequest request : batchRequests) {
  38 + results.add(new CacheRecallRequestResponse(request));
  39 + }
  40 + //2、执行查询
  41 + this.bacthFillResponseWithCache(results,false);
  42 +
  43 + //3、返回结果
  44 + return results;
  45 + }
  46 +
  47 + @Override
  48 + public Map<RecallRequest, RecallResponse> queryMissCacheRequestResults(List<CacheRecallRequestResponse> missCacheRequests) {
  49 + //1、构造请求参数
  50 + List<SearchParam> searchParams = new ArrayList<>();
  51 + for (CacheRecallRequestResponse requestResponse : missCacheRequests) {
  52 + searchParams.add(requestResponse.getRequest().searchParam());
  53 + //控制每次请求es的数量
  54 + if(searchParams.size()>=maxEsRequestCountPerTime){
  55 + break;
  56 + }
  57 + }
  58 + //2、执行搜索
  59 + List<SearchResult> searchResults = searchCommonService.doMutiSearch(ISearchConstants.INDEX_NAME_PRODUCT_INDEX, searchParams);
  60 + //3、构造返回结果
  61 + Map<RecallRequest,RecallResponse> notCachedResults = new HashMap<>();
  62 + for (int i = 0; i < missCacheRequests.size(); i++) {
  63 + RecallRequest request = missCacheRequests.get(i).getRequest();
  64 + SearchResult searchResult = searchResults.get(i);
  65 + RecallResponse response = this.buildResonse(searchResult);
  66 + notCachedResults.put(request,response);
  67 + }
  68 + return notCachedResults;
  69 + }
  70 +
  71 + private RecallResponse buildResonse(SearchResult searchResult) {
  72 + List<Map<String, Object>> results = searchResult.getResultList();
  73 + List<RecallResponse.RecallSkn> recallSkns = new ArrayList<>();
  74 + for (Map<String, Object> result : results) {
  75 + Integer productSkn = MapUtils.getInteger(result, ProductIndexEsField.productSkn, 0);
  76 + Integer brandId = MapUtils.getInteger(result, ProductIndexEsField.brandId, 0);
  77 + Integer middleSortId = MapUtils.getInteger(result, ProductIndexEsField.middleSortId, 0);
  78 + recallSkns.add(new RecallResponse.RecallSkn(productSkn, brandId, middleSortId));
  79 + }
  80 + return new RecallResponse(searchResult.getTotal(), recallSkns);
  81 + }
  82 +
  83 +}
1 -package com.yoho.search.recall.scene.cache.beans;  
2 -  
3 -import com.alibaba.fastjson.JSON;  
4 -import com.yoho.search.base.utils.Transfer;  
5 -import com.yoho.search.recall.scene.cache.CacheRequestResponse;  
6 -import com.yoho.search.recall.scene.models.RecallSknParams;  
7 -import com.yoho.search.recall.scene.models.RecallSknResult;  
8 -  
9 -public class CacheRecallSknRequestResponse extends CacheRequestResponse<RecallSknParams,RecallSknResult> {  
10 -  
11 - public CacheRecallSknRequestResponse(RecallSknParams request) {  
12 - super(request);  
13 - }  
14 -  
15 - private static Transfer<String,RecallSknResult> toResponseTransfer = new Transfer<String, RecallSknResult>() {  
16 - @Override  
17 - public RecallSknResult transfer(String jsonValue) {  
18 - return JSON.parseObject(jsonValue, RecallSknResult.class);  
19 - }  
20 - };  
21 -  
22 - private static Transfer<RecallSknResult,String> fromResponseTransfer = new Transfer<RecallSknResult, String>() {  
23 - @Override  
24 - public String transfer(RecallSknResult recallSknResult) {  
25 - return JSON.toJSONString(recallSknResult);  
26 - }  
27 - };  
28 -  
29 - @Override  
30 - public Transfer<String, RecallSknResult> getToResponseTransfer() {  
31 - return toResponseTransfer;  
32 - }  
33 -  
34 - @Override  
35 - public Transfer<RecallSknResult, String> getFromResponseTransfer() {  
36 - return fromResponseTransfer;  
37 - }  
38 -} 1 +package com.yoho.search.recall.scene.cache.beans;
  2 +
  3 +import com.alibaba.fastjson.JSON;
  4 +import com.yoho.search.base.utils.Transfer;
  5 +import com.yoho.search.recall.scene.cache.CacheRequestResponse;
  6 +import com.yoho.search.recall.scene.models.RecallSknParams;
  7 +import com.yoho.search.recall.scene.models.RecallSknResult;
  8 +
  9 +public class CacheRecallSknRequestResponse extends CacheRequestResponse<RecallSknParams,RecallSknResult> {
  10 +
  11 + public CacheRecallSknRequestResponse(RecallSknParams request) {
  12 + super(request);
  13 + }
  14 +
  15 + private static Transfer<String,RecallSknResult> toResponseTransfer = new Transfer<String, RecallSknResult>() {
  16 + @Override
  17 + public RecallSknResult transfer(String jsonValue) {
  18 + return JSON.parseObject(jsonValue, RecallSknResult.class);
  19 + }
  20 + };
  21 +
  22 + private static Transfer<RecallSknResult,String> fromResponseTransfer = new Transfer<RecallSknResult, String>() {
  23 + @Override
  24 + public String transfer(RecallSknResult recallSknResult) {
  25 + return JSON.toJSONString(recallSknResult);
  26 + }
  27 + };
  28 +
  29 + @Override
  30 + public Transfer<String, RecallSknResult> getToResponseTransfer() {
  31 + return toResponseTransfer;
  32 + }
  33 +
  34 + @Override
  35 + public Transfer<RecallSknResult, String> getFromResponseTransfer() {
  36 + return fromResponseTransfer;
  37 + }
  38 +}
1 -package com.yoho.search.recall.scene.cache.beans;  
2 -  
3 -import com.yoho.search.recall.scene.builder.request.BrandRecallRequestBuilder;  
4 -import com.yoho.search.recall.scene.builder.request.CommonRecallRequestBuilder;  
5 -import com.yoho.search.recall.scene.builder.request.SortPriceRecallRequestBuilder;  
6 -import com.yoho.search.recall.scene.builder.response.RecallResponseBatchBuilder;  
7 -import com.yoho.search.recall.scene.builder.response.RecallSknResultBuilder;  
8 -import com.yoho.search.recall.scene.cache.CacheRequestResponseComponent;  
9 -import com.yoho.search.recall.scene.models.RecallRequest;  
10 -import com.yoho.search.recall.scene.models.RecallResponseBatch;  
11 -import com.yoho.search.recall.scene.models.RecallSknParams;  
12 -import com.yoho.search.recall.scene.models.RecallSknResult;  
13 -import com.yoho.search.recall.scene.persional.PersionalFactor;  
14 -import com.yoho.search.recall.scene.persional.RecallPersionalService;  
15 -import org.springframework.beans.factory.annotation.Autowired;  
16 -import org.springframework.stereotype.Component;  
17 -  
18 -import java.util.ArrayList;  
19 -import java.util.HashMap;  
20 -import java.util.List;  
21 -import java.util.Map;  
22 -  
23 -@Component  
24 -public class CacheRecallSknRequestResponseBean extends CacheRequestResponseComponent<RecallSknParams,RecallSknResult,CacheRecallSknRequestResponse>{  
25 -  
26 - @Autowired  
27 - private RecallPersionalService recallPersionalService;  
28 - @Autowired  
29 - private CacheRecallRequestResponseBean cacheRecallRequestResponseBean;  
30 - @Autowired  
31 - private RecallResponseBatchBuilder recallResponseBatchBuilder;  
32 - @Autowired  
33 - private RecallSknResultBuilder recallSknResultBuilder;  
34 - @Autowired  
35 - private CommonRecallRequestBuilder commonRequestBuilder;  
36 - @Autowired  
37 - private BrandRecallRequestBuilder brandRequestBuilder;  
38 - @Autowired  
39 - private SortPriceRecallRequestBuilder sortPriceRequestBuilder;  
40 -  
41 - /**  
42 - * 召回入口  
43 - * @param recallSknParams  
44 - * @return  
45 - */  
46 - public RecallSknResult doRecallSknResult(RecallSknParams recallSknParams){  
47 - //1、构建请求  
48 - List<CacheRecallSknRequestResponse> requests = new ArrayList<>();  
49 - requests.add(new CacheRecallSknRequestResponse(recallSknParams));  
50 -  
51 - //2、执行父类方法  
52 - this.bacthFillResponseWithCache(requests,false);  
53 -  
54 - //3、判断  
55 - if(requests.size()==1 && requests.get(0).getResponse()!=null){  
56 - return requests.get(0).getResponse();  
57 - }  
58 - return null;  
59 - }  
60 -  
61 - @Override  
62 - public Map<RecallSknParams, RecallSknResult> queryMissCacheRequestResults(List<CacheRecallSknRequestResponse> missCachseRequests) {  
63 - Map<RecallSknParams, RecallSknResult> results = new HashMap<>();  
64 - for (CacheRecallSknRequestResponse request: missCachseRequests) {  
65 - RecallSknResult response = this.doRealRecall(request.getRequest());  
66 - results.put(request.getRequest(),response);  
67 - }  
68 - return results;  
69 - }  
70 -  
71 - /**  
72 - * 真正的召回入口  
73 - * @param param  
74 - * @return  
75 - */  
76 - private RecallSknResult doRealRecall(RecallSknParams param) {  
77 - //1、获取个性化因子  
78 - PersionalFactor persionalFactor = recallPersionalService.queryPersionalFactor(param);  
79 - //2、构造请求  
80 - List<RecallRequest> batchRequests = this.buildBatchRequests(param, persionalFactor);  
81 - //3、批量召回  
82 - List<CacheRecallRequestResponse> requestResponses = cacheRecallRequestResponseBean.batchRecallAndCache(batchRequests);  
83 - //4、获取skn列表[去重]  
84 - RecallResponseBatch recallResponseBatch = recallResponseBatchBuilder.buildRecallResponseBatch(requestResponses);  
85 - //5、构造真实结果[排序,截取skn]  
86 - RecallSknResult recallSknResult = recallSknResultBuilder.builderRecallResult(recallResponseBatch, param, persionalFactor);  
87 - return recallSknResult;  
88 - }  
89 -  
90 - /**  
91 - * 批量构造请求  
92 - * @param param  
93 - * @param persionalFactor  
94 - * @return  
95 - */  
96 - private List<RecallRequest> buildBatchRequests(RecallSknParams param, PersionalFactor persionalFactor) {  
97 - //1、构造召回请求  
98 - List<RecallRequest> allRequests = new ArrayList<>();  
99 - //2、构造非个性化的请求  
100 - List<RecallRequest> commonRequests = commonRequestBuilder.buildCommonRecallRequests(param.getParamQueryFilter(), param.getFirstProductSkns());  
101 - allRequests.addAll(commonRequests);  
102 - //4、构建个性化品牌的召回请求  
103 - List<RecallRequest> brandRequests = brandRequestBuilder.buildBrandRecallRequests(param.getParamQueryFilter(), persionalFactor.getBrandIds());  
104 - allRequests.addAll(brandRequests);  
105 - //5、构建个性化品牌的召回请求  
106 - List<RecallRequest> sortPriceRequests = sortPriceRequestBuilder.buildSortPriceRecallRequests(param.getParamQueryFilter(), persionalFactor.getSortPriceAreas());  
107 - allRequests.addAll(sortPriceRequests);  
108 - return allRequests;  
109 - }  
110 -  
111 -  
112 -} 1 +package com.yoho.search.recall.scene.cache.beans;
  2 +
  3 +import com.yoho.search.recall.scene.builder.request.BrandRecallRequestBuilder;
  4 +import com.yoho.search.recall.scene.builder.request.CommonRecallRequestBuilder;
  5 +import com.yoho.search.recall.scene.builder.request.SortPriceRecallRequestBuilder;
  6 +import com.yoho.search.recall.scene.builder.response.RecallResponseBatchBuilder;
  7 +import com.yoho.search.recall.scene.builder.response.RecallSknResultBuilder;
  8 +import com.yoho.search.recall.scene.cache.CacheRequestResponseComponent;
  9 +import com.yoho.search.recall.scene.models.RecallRequest;
  10 +import com.yoho.search.recall.scene.models.RecallResponseBatch;
  11 +import com.yoho.search.recall.scene.models.RecallSknParams;
  12 +import com.yoho.search.recall.scene.models.RecallSknResult;
  13 +import com.yoho.search.recall.scene.persional.PersionalFactor;
  14 +import com.yoho.search.recall.scene.persional.RecallPersionalService;
  15 +import org.springframework.beans.factory.annotation.Autowired;
  16 +import org.springframework.stereotype.Component;
  17 +
  18 +import java.util.ArrayList;
  19 +import java.util.HashMap;
  20 +import java.util.List;
  21 +import java.util.Map;
  22 +
  23 +@Component
  24 +public class CacheRecallSknRequestResponseBean extends CacheRequestResponseComponent<RecallSknParams,RecallSknResult,CacheRecallSknRequestResponse>{
  25 +
  26 + @Autowired
  27 + private RecallPersionalService recallPersionalService;
  28 + @Autowired
  29 + private CacheRecallRequestResponseBean cacheRecallRequestResponseBean;
  30 + @Autowired
  31 + private RecallResponseBatchBuilder recallResponseBatchBuilder;
  32 + @Autowired
  33 + private RecallSknResultBuilder recallSknResultBuilder;
  34 + @Autowired
  35 + private CommonRecallRequestBuilder commonRequestBuilder;
  36 + @Autowired
  37 + private BrandRecallRequestBuilder brandRequestBuilder;
  38 + @Autowired
  39 + private SortPriceRecallRequestBuilder sortPriceRequestBuilder;
  40 +
  41 + /**
  42 + * 召回入口
  43 + * @param recallSknParams
  44 + * @return
  45 + */
  46 + public RecallSknResult doRecallSknResult(RecallSknParams recallSknParams){
  47 + //1、构建请求
  48 + List<CacheRecallSknRequestResponse> requests = new ArrayList<>();
  49 + requests.add(new CacheRecallSknRequestResponse(recallSknParams));
  50 +
  51 + //2、执行父类方法
  52 + this.bacthFillResponseWithCache(requests,false);
  53 +
  54 + //3、判断
  55 + if(requests.size()==1 && requests.get(0).getResponse()!=null){
  56 + return requests.get(0).getResponse();
  57 + }
  58 + return null;
  59 + }
  60 +
  61 + @Override
  62 + public Map<RecallSknParams, RecallSknResult> queryMissCacheRequestResults(List<CacheRecallSknRequestResponse> missCachseRequests) {
  63 + Map<RecallSknParams, RecallSknResult> results = new HashMap<>();
  64 + for (CacheRecallSknRequestResponse request: missCachseRequests) {
  65 + RecallSknResult response = this.doRealRecall(request.getRequest());
  66 + results.put(request.getRequest(),response);
  67 + }
  68 + return results;
  69 + }
  70 +
  71 + /**
  72 + * 真正的召回入口
  73 + * @param param
  74 + * @return
  75 + */
  76 + private RecallSknResult doRealRecall(RecallSknParams param) {
  77 + //1、获取个性化因子
  78 + PersionalFactor persionalFactor = recallPersionalService.queryPersionalFactor(param);
  79 + //2、构造请求
  80 + List<RecallRequest> batchRequests = this.buildBatchRequests(param, persionalFactor);
  81 + //3、批量召回
  82 + List<CacheRecallRequestResponse> requestResponses = cacheRecallRequestResponseBean.batchRecallAndCache(batchRequests);
  83 + //4、获取skn列表[去重]
  84 + RecallResponseBatch recallResponseBatch = recallResponseBatchBuilder.buildRecallResponseBatch(requestResponses);
  85 + //5、构造真实结果[排序,截取skn]
  86 + RecallSknResult recallSknResult = recallSknResultBuilder.builderRecallResult(recallResponseBatch, param, persionalFactor);
  87 + return recallSknResult;
  88 + }
  89 +
  90 + /**
  91 + * 批量构造请求
  92 + * @param param
  93 + * @param persionalFactor
  94 + * @return
  95 + */
  96 + private List<RecallRequest> buildBatchRequests(RecallSknParams param, PersionalFactor persionalFactor) {
  97 + //1、构造召回请求
  98 + List<RecallRequest> allRequests = new ArrayList<>();
  99 + //2、构造非个性化的请求
  100 + List<RecallRequest> commonRequests = commonRequestBuilder.buildCommonRecallRequests(param.getParamQueryFilter(), param.getFirstProductSkns());
  101 + allRequests.addAll(commonRequests);
  102 + //4、构建个性化品牌的召回请求
  103 + List<RecallRequest> brandRequests = brandRequestBuilder.buildBrandRecallRequests(param.getParamQueryFilter(), persionalFactor.getBrandIds());
  104 + allRequests.addAll(brandRequests);
  105 + //5、构建个性化品牌的召回请求
  106 + List<RecallRequest> sortPriceRequests = sortPriceRequestBuilder.buildSortPriceRecallRequests(param.getParamQueryFilter(), persionalFactor.getSortPriceAreas());
  107 + allRequests.addAll(sortPriceRequests);
  108 + return allRequests;
  109 + }
  110 +
  111 +
  112 +}
1 -package com.yoho.search.recall.scene.cache.beans;  
2 -  
3 -import com.alibaba.fastjson.JSON;  
4 -import com.alibaba.fastjson.JSONObject;  
5 -import com.yoho.core.redis.cluster.operations.serializer.RedisKeyBuilder;  
6 -import com.yoho.search.base.utils.Transfer;  
7 -import com.yoho.search.recall.scene.cache.CacheRequestResponse;  
8 -import com.yoho.search.recall.scene.models.SknInfoRequest;  
9 -  
10 -import java.util.HashMap;  
11 -import java.util.Map;  
12 -  
13 -public class CacheSknInfoRequestResponse extends CacheRequestResponse<SknInfoRequest, Map<String, Object>> {  
14 -  
15 - public CacheSknInfoRequestResponse(SknInfoRequest sknInfoRequest) {  
16 - super(sknInfoRequest);  
17 - }  
18 -  
19 - static Transfer<String, Map<String, Object>> toResponseTransfer = new Transfer<String, Map<String, Object>>() {  
20 - @Override  
21 - public Map<String, Object> transfer(String value) {  
22 - Map<String, Object> product = new HashMap<>();  
23 - product.putAll(JSONObject.parseObject(value));  
24 - return product;  
25 - }  
26 - };  
27 -  
28 - static Transfer<Map<String, Object>, String> fromResponseTransfer = new Transfer<Map<String, Object>, String>() {  
29 - @Override  
30 - public String transfer(Map<String, Object> product) {  
31 - return JSON.toJSONString(product);  
32 - }  
33 - };  
34 -  
35 - @Override  
36 - public Transfer<String, Map<String, Object>> getToResponseTransfer() {  
37 - return toResponseTransfer;  
38 - }  
39 -  
40 - @Override  
41 - public Transfer<Map<String, Object>, String> getFromResponseTransfer() {  
42 - return fromResponseTransfer;  
43 - }  
44 -} 1 +package com.yoho.search.recall.scene.cache.beans;
  2 +
  3 +import com.alibaba.fastjson.JSON;
  4 +import com.alibaba.fastjson.JSONObject;
  5 +import com.yoho.core.redis.cluster.operations.serializer.RedisKeyBuilder;
  6 +import com.yoho.search.base.utils.Transfer;
  7 +import com.yoho.search.recall.scene.cache.CacheRequestResponse;
  8 +import com.yoho.search.recall.scene.models.SknInfoRequest;
  9 +
  10 +import java.util.HashMap;
  11 +import java.util.Map;
  12 +
  13 +public class CacheSknInfoRequestResponse extends CacheRequestResponse<SknInfoRequest, Map<String, Object>> {
  14 +
  15 + public CacheSknInfoRequestResponse(SknInfoRequest sknInfoRequest) {
  16 + super(sknInfoRequest);
  17 + }
  18 +
  19 + static Transfer<String, Map<String, Object>> toResponseTransfer = new Transfer<String, Map<String, Object>>() {
  20 + @Override
  21 + public Map<String, Object> transfer(String value) {
  22 + Map<String, Object> product = new HashMap<>();
  23 + product.putAll(JSONObject.parseObject(value));
  24 + return product;
  25 + }
  26 + };
  27 +
  28 + static Transfer<Map<String, Object>, String> fromResponseTransfer = new Transfer<Map<String, Object>, String>() {
  29 + @Override
  30 + public String transfer(Map<String, Object> product) {
  31 + return JSON.toJSONString(product);
  32 + }
  33 + };
  34 +
  35 + @Override
  36 + public Transfer<String, Map<String, Object>> getToResponseTransfer() {
  37 + return toResponseTransfer;
  38 + }
  39 +
  40 + @Override
  41 + public Transfer<Map<String, Object>, String> getFromResponseTransfer() {
  42 + return fromResponseTransfer;
  43 + }
  44 +}
1 -package com.yoho.search.recall.scene.cache.beans;  
2 -  
3 -  
4 -import com.yoho.search.base.utils.ISearchConstants;  
5 -import com.yoho.search.base.utils.ProductIndexEsField;  
6 -import com.yoho.search.core.es.model.SearchParam;  
7 -import com.yoho.search.core.es.model.SearchResult;  
8 -import com.yoho.search.recall.scene.cache.CacheRequestResponseComponent;  
9 -import com.yoho.search.recall.scene.models.SknInfoRequest;  
10 -import com.yoho.search.service.base.SearchCommonService;  
11 -import com.yoho.search.service.base.index.ProductIndexBaseService;  
12 -import org.apache.commons.collections.MapUtils;  
13 -import org.elasticsearch.index.query.QueryBuilders;  
14 -import org.springframework.beans.factory.annotation.Autowired;  
15 -import org.springframework.stereotype.Component;  
16 -  
17 -import java.util.ArrayList;  
18 -import java.util.HashMap;  
19 -import java.util.List;  
20 -import java.util.Map;  
21 -  
22 -@Component  
23 -public class CacheSknInfoRequestResponseBean extends CacheRequestResponseComponent<SknInfoRequest,Map<String, Object>,CacheSknInfoRequestResponse>{  
24 -  
25 - @Autowired  
26 - private SearchCommonService searchCommonService;  
27 - @Autowired  
28 - private ProductIndexBaseService productIndexBaseService;  
29 -  
30 - /**  
31 - * 按skn查询并按顺序返回  
32 - *  
33 - * @param productSkns  
34 - * @return  
35 - */  
36 - public List<Map<String, Object>> queryProductListBySkn(List<Integer> productSkns,int size){  
37 - //1、批量查询SKN信息  
38 - List<CacheSknInfoRequestResponse> sknInfoCacheRequestRespons = this.batchQuery(productSkns);  
39 - //2、构造返回结果  
40 - List<Map<String, Object>> finalResults = new ArrayList<>();  
41 - for (CacheSknInfoRequestResponse sknInfoCacheRequestResponse : sknInfoCacheRequestRespons) {  
42 - if(sknInfoCacheRequestResponse !=null && sknInfoCacheRequestResponse.getResponse()!=null){  
43 - finalResults.add(sknInfoCacheRequestResponse.getResponse());  
44 - }  
45 - if(finalResults.size()>=size){  
46 - break;  
47 - }  
48 - }  
49 - return finalResults;  
50 - }  
51 -  
52 - private List<CacheSknInfoRequestResponse> batchQuery(List<Integer> productSkns){  
53 - //1、构建请求与返回结果  
54 - final List<CacheSknInfoRequestResponse> requests = new ArrayList<>();  
55 - for (Integer productSkn : productSkns) {  
56 - requests.add(new CacheSknInfoRequestResponse(new SknInfoRequest(productSkn)));  
57 - }  
58 - //2、调父类方法  
59 - this.bacthFillResponseWithCache(requests,true);  
60 -  
61 - //3、返回结果  
62 - return requests;  
63 - }  
64 -  
65 - @Override  
66 - public Map<SknInfoRequest, Map<String, Object>> queryMissCacheRequestResults(List<CacheSknInfoRequestResponse> missCacheRequests) {  
67 - //1、合法性判断  
68 - Map<SknInfoRequest,Map<String, Object>> results = new HashMap<>();  
69 - if(missCacheRequests==null||missCacheRequests.isEmpty()){  
70 - return results;  
71 - }  
72 - //2、获取skn  
73 - List<Integer> productSkns = new ArrayList<>();  
74 - for (CacheSknInfoRequestResponse sknInfoCacheRequestResponse : missCacheRequests) {  
75 - productSkns.add(sknInfoCacheRequestResponse.getRequest().getProductSkn());  
76 - }  
77 - //3、构建SearchParam  
78 - SearchParam searchParam = new SearchParam();  
79 - searchParam.setOffset(0);  
80 - searchParam.setSize(productSkns.size());  
81 - searchParam.setFiter(QueryBuilders.termsQuery(ProductIndexEsField.productSkn, productSkns));  
82 - searchParam.setIncludeFields(productIndexBaseService.getProductIndexIncludeFields());  
83 - SearchResult searchResult = searchCommonService.doSearch(ISearchConstants.INDEX_NAME_PRODUCT_INDEX, searchParam);  
84 - List<Map<String, Object>> productList = productIndexBaseService.getProductListWithPricePlan(searchResult.getResultList());  
85 - //4、构建SKN临时结果  
86 - Map<Integer,Map<String, Object>> productTempMap = new HashMap<>();  
87 - for (Map<String, Object> product: productList) {  
88 - productTempMap.put(MapUtils.getIntValue(product,"product_skn",0),product);  
89 - }  
90 - //5、构造最终结果  
91 - for (CacheSknInfoRequestResponse requestResponse :missCacheRequests ) {  
92 - results.put(requestResponse.getRequest(),productTempMap.get(requestResponse.getRequest().getProductSkn()));  
93 - }  
94 - return results;  
95 - }  
96 -  
97 -  
98 -  
99 -  
100 -  
101 -  
102 -} 1 +package com.yoho.search.recall.scene.cache.beans;
  2 +
  3 +
  4 +import com.yoho.search.base.utils.ISearchConstants;
  5 +import com.yoho.search.base.utils.ProductIndexEsField;
  6 +import com.yoho.search.core.es.model.SearchParam;
  7 +import com.yoho.search.core.es.model.SearchResult;
  8 +import com.yoho.search.recall.scene.cache.CacheRequestResponseComponent;
  9 +import com.yoho.search.recall.scene.models.SknInfoRequest;
  10 +import com.yoho.search.service.base.SearchCommonService;
  11 +import com.yoho.search.service.base.index.ProductIndexBaseService;
  12 +import org.apache.commons.collections.MapUtils;
  13 +import org.elasticsearch.index.query.QueryBuilders;
  14 +import org.springframework.beans.factory.annotation.Autowired;
  15 +import org.springframework.stereotype.Component;
  16 +
  17 +import java.util.ArrayList;
  18 +import java.util.HashMap;
  19 +import java.util.List;
  20 +import java.util.Map;
  21 +
  22 +@Component
  23 +public class CacheSknInfoRequestResponseBean extends CacheRequestResponseComponent<SknInfoRequest,Map<String, Object>,CacheSknInfoRequestResponse>{
  24 +
  25 + @Autowired
  26 + private SearchCommonService searchCommonService;
  27 + @Autowired
  28 + private ProductIndexBaseService productIndexBaseService;
  29 +
  30 + /**
  31 + * 按skn查询并按顺序返回
  32 + *
  33 + * @param productSkns
  34 + * @return
  35 + */
  36 + public List<Map<String, Object>> queryProductListBySkn(List<Integer> productSkns,int size){
  37 + //1、批量查询SKN信息
  38 + List<CacheSknInfoRequestResponse> sknInfoCacheRequestRespons = this.batchQuery(productSkns);
  39 + //2、构造返回结果
  40 + List<Map<String, Object>> finalResults = new ArrayList<>();
  41 + for (CacheSknInfoRequestResponse sknInfoCacheRequestResponse : sknInfoCacheRequestRespons) {
  42 + if(sknInfoCacheRequestResponse !=null && sknInfoCacheRequestResponse.getResponse()!=null){
  43 + finalResults.add(sknInfoCacheRequestResponse.getResponse());
  44 + }
  45 + if(finalResults.size()>=size){
  46 + break;
  47 + }
  48 + }
  49 + return finalResults;
  50 + }
  51 +
  52 + private List<CacheSknInfoRequestResponse> batchQuery(List<Integer> productSkns){
  53 + //1、构建请求与返回结果
  54 + final List<CacheSknInfoRequestResponse> requests = new ArrayList<>();
  55 + for (Integer productSkn : productSkns) {
  56 + requests.add(new CacheSknInfoRequestResponse(new SknInfoRequest(productSkn)));
  57 + }
  58 + //2、调父类方法
  59 + this.bacthFillResponseWithCache(requests,true);
  60 +
  61 + //3、返回结果
  62 + return requests;
  63 + }
  64 +
  65 + @Override
  66 + public Map<SknInfoRequest, Map<String, Object>> queryMissCacheRequestResults(List<CacheSknInfoRequestResponse> missCacheRequests) {
  67 + //1、合法性判断
  68 + Map<SknInfoRequest,Map<String, Object>> results = new HashMap<>();
  69 + if(missCacheRequests==null||missCacheRequests.isEmpty()){
  70 + return results;
  71 + }
  72 + //2、获取skn
  73 + List<Integer> productSkns = new ArrayList<>();
  74 + for (CacheSknInfoRequestResponse sknInfoCacheRequestResponse : missCacheRequests) {
  75 + productSkns.add(sknInfoCacheRequestResponse.getRequest().getProductSkn());
  76 + }
  77 + //3、构建SearchParam
  78 + SearchParam searchParam = new SearchParam();
  79 + searchParam.setOffset(0);
  80 + searchParam.setSize(productSkns.size());
  81 + searchParam.setFiter(QueryBuilders.termsQuery(ProductIndexEsField.productSkn, productSkns));
  82 + searchParam.setIncludeFields(productIndexBaseService.getProductIndexIncludeFields());
  83 + SearchResult searchResult = searchCommonService.doSearch(ISearchConstants.INDEX_NAME_PRODUCT_INDEX, searchParam);
  84 + List<Map<String, Object>> productList = productIndexBaseService.getProductListWithPricePlan(searchResult.getResultList());
  85 + //4、构建SKN临时结果
  86 + Map<Integer,Map<String, Object>> productTempMap = new HashMap<>();
  87 + for (Map<String, Object> product: productList) {
  88 + productTempMap.put(MapUtils.getIntValue(product,"product_skn",0),product);
  89 + }
  90 + //5、构造最终结果
  91 + for (CacheSknInfoRequestResponse requestResponse :missCacheRequests ) {
  92 + results.put(requestResponse.getRequest(),productTempMap.get(requestResponse.getRequest().getProductSkn()));
  93 + }
  94 + return results;
  95 + }
  96 +
  97 +
  98 +
  99 +
  100 +
  101 +
  102 +}