Authored by hugufei

移包and重命名

... ... @@ -7,14 +7,13 @@ import com.yoho.search.base.utils.ProductIndexEsField;
import com.yoho.search.core.es.model.SearchParam;
import com.yoho.search.core.es.model.SearchResult;
import com.yoho.search.models.SearchApiResult;
import com.yoho.search.recall.scene.beans.CacheRecallParamsRecallResultBean;
import com.yoho.search.recall.scene.beans.CacheSknResquestProductResponseBean;
import com.yoho.search.recall.scene.beans.QueryRecallResultCacheBean;
import com.yoho.search.recall.scene.beans.QueryProductInfoCacheBean;
import com.yoho.search.recall.scene.beans.helper.SortBuilderHelper;
import com.yoho.search.recall.scene.models.*;
import com.yoho.search.recall.scene.beans.builder.RecallParamsBuilder;
import com.yoho.search.recall.scene.models.RecallParams;
import com.yoho.search.service.base.SearchCommonService;
import com.yoho.search.service.base.index.ProductIndexBaseService;
import com.yoho.search.service.helper.SearchCommonHelper;
import org.apache.commons.collections.MapUtils;
import org.elasticsearch.index.query.BoolQueryBuilder;
... ... @@ -40,13 +39,11 @@ public class SceneRecallService {
@Autowired
private SearchCommonHelper searchCommonHelper;
@Autowired
private ProductIndexBaseService productIndexBaseService;
@Autowired
private SearchCommonService searchCommonService;
@Autowired
private CacheRecallParamsRecallResultBean cacheRecallSknRequestResponseBean;
private QueryRecallResultCacheBean queryRecallResultCacheBean;
@Autowired
private CacheSknResquestProductResponseBean cacheSknInfoRequestResponseBean;
private QueryProductInfoCacheBean queryProductInfoCacheBean;
public SearchApiResult sceneRecall(Map<String, String> paramMap) {
try {
... ... @@ -59,7 +56,7 @@ public class SceneRecallService {
//2、构造召回相关参数
RecallParams recallParams = recallParamsBuilder.buildRecallParams(paramMap,pageSize);
//3、执行召回
RecallResult recallResult = cacheRecallSknRequestResponseBean.doRecallSknResult(recallParams);
RecallResult recallResult = queryRecallResultCacheBean.queryRecallResult(recallParams);
//4、根据召回结果查询商品信息
List<Map<String, Object>> productList = this.queryProductList(recallParams, recallResult,page,pageSize);
//5、构造返回结果
... ... @@ -87,7 +84,7 @@ public class SceneRecallService {
//3、过滤召回的skn,修改真实页码,执行查询
productSkns = this.queryProductSknByFilterSkn(recallParams, recallResult.getSknList(), recallTotalPage-page, pageSize);
}
return cacheSknInfoRequestResponseBean.queryProductListBySkn(productSkns,productSkns.size());
return queryProductInfoCacheBean.queryProductListBySkn(productSkns,productSkns.size());
}
/**
... ...
... ... @@ -14,9 +14,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import java.util.*;
public abstract class AbstractCacheRequestResponseBean<K extends ICacheRequest, V,T extends AbstractCacheRequestResponse<K, V>> {
public abstract class AbstractCacheBean<K extends ICacheRequest, V,T extends AbstractCacheRequestResponse<K, V>> {
private static final Logger logger = LoggerFactory.getLogger(AbstractCacheRequestResponseBean.class);
private static final Logger logger = LoggerFactory.getLogger(AbstractCacheBean.class);
@Autowired
private YohoSearchRedisComponent yohoSearchRedisComponent;
... ...
... ... @@ -18,7 +18,7 @@ import java.util.List;
import java.util.Map;
@Component
public class CacheRecallRequestRecallResponseBean extends AbstractCacheRequestResponseBean<RecallRequest,RecallResponse,CacheRecallRequestRecallResponse> {
public class BatchRecallCacheBean extends AbstractCacheBean<RecallRequest,RecallResponse,CacheRecallRequestRecallResponse> {
@Autowired
private SearchCommonService searchCommonService;
... ...
... ... @@ -20,7 +20,7 @@ import java.util.List;
import java.util.Map;
@Component
public class CacheSknResquestProductResponseBean extends AbstractCacheRequestResponseBean<SknResquest,Map<String, Object>,CacheSknResquestProductResponse> {
public class QueryProductInfoCacheBean extends AbstractCacheBean<SknResquest,Map<String, Object>,CacheSknResquestProductResponse> {
@Autowired
private SearchCommonService searchCommonService;
... ...
package com.yoho.search.recall.scene.beans;
import com.yoho.search.recall.scene.beans.builder.BrandRecallRequestBuilder;
import com.yoho.search.recall.scene.beans.builder.CommonRecallRequestBuilder;
import com.yoho.search.recall.scene.beans.builder.SortPriceRecallRequestBuilder;
import com.yoho.search.recall.scene.beans.builder.RecallMergerResultBuilder;
import com.yoho.search.recall.scene.beans.builder.RecallResultBuilder;
import com.yoho.search.recall.scene.models.*;
import com.yoho.search.recall.scene.beans.persional.QueryUserPersionalFactorBean;
import com.yoho.search.recall.scene.models.CacheRecallRequestRecallResponse;
import com.yoho.search.recall.scene.models.CacheRecallParamsRecallResult;
import com.yoho.search.recall.scene.models.RecallRequest;
import com.yoho.search.recall.scene.models.RecallParams;
import com.yoho.search.recall.scene.models.PersionalFactor;
import com.yoho.search.recall.scene.models.RecallMergerResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component
public class CacheRecallParamsRecallResultBean extends AbstractCacheRequestResponseBean<RecallParams,RecallResult,CacheRecallParamsRecallResult> {
@Autowired
private QueryUserPersionalFactorBean queryUserPersionalFactorBean;
@Autowired
private CacheRecallRequestRecallResponseBean cacheRecallRequestResponseBean;
@Autowired
private RecallMergerResultBuilder recallMergerResultBuilder;
@Autowired
private RecallResultBuilder recallResultBuilder;
@Autowired
private CommonRecallRequestBuilder commonRequestBuilder;
@Autowired
private BrandRecallRequestBuilder brandRequestBuilder;
@Autowired
private SortPriceRecallRequestBuilder sortPriceRequestBuilder;
/**
* 召回入口
* @param recallParams
* @return
*/
public RecallResult doRecallSknResult(RecallParams recallParams){
//1、构建请求
List<CacheRecallParamsRecallResult> requests = new ArrayList<>();
requests.add(new CacheRecallParamsRecallResult(recallParams));
//2、执行父类方法
this.bacthFillResponseWithCache(requests,false,1);
//3、判断
if(requests.size()==1 && requests.get(0).getResponse()!=null){
return requests.get(0).getResponse();
}
return null;
}
@Override
public Map<RecallParams, RecallResult> queryMissCacheRequestResults(List<CacheRecallParamsRecallResult> missCachseRequests) {
Map<RecallParams, RecallResult> results = new HashMap<>();
for (CacheRecallParamsRecallResult request: missCachseRequests) {
RecallResult response = this.doRealRecall(request.getRequest());
results.put(request.getRequest(),response);
}
return results;
}
/**
* 真正的召回入口
* @param param
* @return
*/
private RecallResult doRealRecall(RecallParams param) {
//1、获取个性化因子
PersionalFactor persionalFactor = queryUserPersionalFactorBean.queryPersionalFactor(param);
//2、构造请求
List<RecallRequest> batchRequests = this.buildBatchRequests(param, persionalFactor);
//3、批量召回
List<CacheRecallRequestRecallResponse> requestResponses = cacheRecallRequestResponseBean.batchRecallAndCache(batchRequests);
//4、获取skn列表[去重]
RecallMergerResult recallMergerResult = recallMergerResultBuilder.buildRecallResponseBatch(requestResponses);
//5、构造真实结果[排序,截取skn]
RecallResult recallResult = recallResultBuilder.builderRecallResult(recallMergerResult, param, persionalFactor);
return recallResult;
}
/**
* 批量构造请求
* @param param
* @param persionalFactor
* @return
*/
private List<RecallRequest> buildBatchRequests(RecallParams param, PersionalFactor persionalFactor) {
//1、构造召回请求
List<RecallRequest> allRequests = new ArrayList<>();
//2、构造非个性化的请求
List<RecallRequest> commonRequests = commonRequestBuilder.buildCommonRecallRequests(param.getParamQueryFilter(), param.getFirstProductSkns());
allRequests.addAll(commonRequests);
//4、构建个性化品牌的召回请求
List<RecallRequest> brandRequests = brandRequestBuilder.buildBrandRecallRequests(param.getParamQueryFilter(), persionalFactor.getBrandIds());
allRequests.addAll(brandRequests);
//5、构建个性化品牌的召回请求
List<RecallRequest> sortPriceRequests = sortPriceRequestBuilder.buildSortPriceRecallRequests(param.getParamQueryFilter(), persionalFactor.getSortPriceAreas());
allRequests.addAll(sortPriceRequests);
return allRequests;
}
}
package com.yoho.search.recall.scene.beans;
import com.yoho.search.recall.scene.beans.builder.BrandRecallRequestBuilder;
import com.yoho.search.recall.scene.beans.builder.CommonRecallRequestBuilder;
import com.yoho.search.recall.scene.beans.builder.SortPriceRecallRequestBuilder;
import com.yoho.search.recall.scene.beans.builder.RecallMergerResultBuilder;
import com.yoho.search.recall.scene.beans.builder.RecallResultBuilder;
import com.yoho.search.recall.scene.models.*;
import com.yoho.search.recall.scene.beans.persional.QueryUserPersionalFactorBean;
import com.yoho.search.recall.scene.models.CacheRecallRequestRecallResponse;
import com.yoho.search.recall.scene.models.CacheRecallParamsRecallResult;
import com.yoho.search.recall.scene.models.RecallRequest;
import com.yoho.search.recall.scene.models.RecallParams;
import com.yoho.search.recall.scene.models.PersionalFactor;
import com.yoho.search.recall.scene.models.RecallMergerResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component
public class QueryRecallResultCacheBean extends AbstractCacheBean<RecallParams,RecallResult,CacheRecallParamsRecallResult> {
@Autowired
private CommonRecallRequestBuilder commonRequestBuilder;
@Autowired
private BrandRecallRequestBuilder brandRequestBuilder;
@Autowired
private SortPriceRecallRequestBuilder sortPriceRequestBuilder;
@Autowired
private BatchRecallCacheBean batchRecallCacheBean;
@Autowired
private QueryUserPersionalFactorBean queryUserPersionalFactorBean;
@Autowired
private RecallMergerResultBuilder recallMergerResultBuilder;
@Autowired
private RecallResultBuilder recallResultBuilder;
/**
* 召回入口
* @param recallParams
* @return
*/
public RecallResult queryRecallResult(RecallParams recallParams){
//1、构建请求
List<CacheRecallParamsRecallResult> requests = new ArrayList<>();
requests.add(new CacheRecallParamsRecallResult(recallParams));
//2、执行父类方法
this.bacthFillResponseWithCache(requests,false,1);
//3、判断
if(requests.size()==1 && requests.get(0).getResponse()!=null){
return requests.get(0).getResponse();
}
return null;
}
@Override
public Map<RecallParams, RecallResult> queryMissCacheRequestResults(List<CacheRecallParamsRecallResult> missCachseRequests) {
Map<RecallParams, RecallResult> results = new HashMap<>();
for (CacheRecallParamsRecallResult request: missCachseRequests) {
RecallResult response = this.doRealRecall(request.getRequest());
results.put(request.getRequest(),response);
}
return results;
}
/**
* 真正的召回入口
* @param param
* @return
*/
private RecallResult doRealRecall(RecallParams param) {
//1、获取个性化因子
PersionalFactor persionalFactor = queryUserPersionalFactorBean.queryPersionalFactor(param);
//2、构造请求
List<RecallRequest> batchRequests = this.buildBatchRequests(param, persionalFactor);
//3、批量召回
List<CacheRecallRequestRecallResponse> requestResponses = batchRecallCacheBean.batchRecallAndCache(batchRequests);
//4、获取skn列表[去重]
RecallMergerResult recallMergerResult = recallMergerResultBuilder.buildRecallResponseBatch(requestResponses);
//5、构造真实结果[排序,截取skn]
RecallResult recallResult = recallResultBuilder.builderRecallResult(recallMergerResult, param, persionalFactor);
return recallResult;
}
/**
* 批量构造请求
* @param param
* @param persionalFactor
* @return
*/
private List<RecallRequest> buildBatchRequests(RecallParams param, PersionalFactor persionalFactor) {
//1、构造召回请求
List<RecallRequest> allRequests = new ArrayList<>();
//2、构造非个性化的请求
List<RecallRequest> commonRequests = commonRequestBuilder.buildCommonRecallRequests(param.getParamQueryFilter(), param.getFirstProductSkns());
allRequests.addAll(commonRequests);
//4、构建个性化品牌的召回请求
List<RecallRequest> brandRequests = brandRequestBuilder.buildBrandRecallRequests(param.getParamQueryFilter(), persionalFactor.getBrandIds());
allRequests.addAll(brandRequests);
//5、构建个性化品牌的召回请求
List<RecallRequest> sortPriceRequests = sortPriceRequestBuilder.buildSortPriceRecallRequests(param.getParamQueryFilter(), persionalFactor.getSortPriceAreas());
allRequests.addAll(sortPriceRequests);
return allRequests;
}
}
... ...