Authored by hugufei

FIX

package com.yoho.search.recall.scene.beans.cache;
import com.yoho.core.redis.cluster.operations.serializer.RedisKeyBuilder;
import com.yoho.search.base.utils.CollectionUtils;
import com.yoho.search.base.utils.ISearchConstants;
import com.yoho.search.base.utils.ProductIndexEsField;
import com.yoho.search.common.cache.impls.EhCache;
import com.yoho.search.common.cache.impls.SearchRedis;
import com.yoho.search.common.cache.model.CacheObject;
import com.yoho.search.core.es.model.SearchParam;
import com.yoho.search.core.es.model.SearchResult;
import com.yoho.search.recall.scene.beans.persional.PageProductIdBitSetComponent;
import com.yoho.search.recall.scene.beans.strategy.IStrategy;
import com.yoho.search.recall.scene.beans.strategy.impls.IRecallSknStrategy;
import com.yoho.search.recall.scene.beans.strategy.impls.RealTimeSimilarSknStrategy;
import com.yoho.search.recall.scene.beans.strategy.impls.RecommendSknStrategy;
import com.yoho.search.recall.scene.models.common.ParamQueryFilter;
import com.yoho.search.recall.scene.models.personal.PageProductIdBitSet;
... ... @@ -18,6 +22,7 @@ import com.yoho.search.recall.scene.models.req.RecallRequestResponse;
import com.yoho.search.recall.scene.models.req.RecallResponse;
import com.yoho.search.recall.scene.models.req.UserRecallRequest;
import com.yoho.search.service.base.SearchCommonService;
import com.yoho.search.service.base.SearchDynamicConfigService;
import org.apache.commons.collections.MapUtils;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
... ... @@ -55,8 +60,11 @@ public class SknRecallCacheBean {
try {
//1、获取SKN,以及每个skn对应的找回类型
List<Integer> filterSknList = new ArrayList<>();
// if (userPersonalFactor.getRecommendSknList() != null) {
// filterSknList.addAll(userPersonalFactor.getRecommendSknList());
// }
if (userPersonalFactor.getRecommendSknList() != null) {
filterSknList.addAll(userPersonalFactor.getRecommendSknList());
filterSknList.addAll(userPersonalFactor.getRealTimeSimilarSknList());
}
//2、执行查询
List<Integer> filterSknResults;
... ... @@ -68,7 +76,8 @@ public class SknRecallCacheBean {
//3、构造结果
List<RecallRequestResponse> results = new ArrayList<>();
ParamQueryFilter paramQueryFilter = userRecallRequest.getParamQueryFilter();
results.addAll(this.buildResults(paramQueryFilter, userPersonalFactor.getRecommendSknList(), filterSknResults, maxReturnCount));
results.addAll(this.buildResults(paramQueryFilter, userPersonalFactor.getRecommendSknList(), RecommendSknStrategy.class, filterSknResults, maxReturnCount));
results.addAll(this.buildResults(paramQueryFilter, userPersonalFactor.getRealTimeSimilarSknList(), RealTimeSimilarSknStrategy.class, filterSknResults, maxReturnCount));
return results;
} catch (Exception e) {
RECALL_NEW_LOGGER.error(e.getMessage(), e);
... ... @@ -76,7 +85,7 @@ public class SknRecallCacheBean {
}
}
private List<RecallRequestResponse> buildResults(ParamQueryFilter paramQueryFilter, List<Integer> filterSkns, List<Integer> sknResults, int maxReturnCount) {
private List<RecallRequestResponse> buildResults(ParamQueryFilter paramQueryFilter, List<Integer> filterSkns, Class<? extends IRecallSknStrategy> clazz, List<Integer> sknResults, int maxReturnCount) {
if (filterSkns == null || filterSkns.isEmpty() || sknResults == null || sknResults.isEmpty()) {
return new ArrayList<>();
}
... ... @@ -85,10 +94,10 @@ public class SknRecallCacheBean {
if (results.size() >= maxReturnCount) {
break;
}
if (!sknResults.contains(skn)) {
if(!sknResults.contains(skn)){
continue;
}
RecallRequest recallRequest = new RecallRequest(paramQueryFilter, new RecommendSknStrategy(skn));
RecallRequest recallRequest = new RecallRequest(paramQueryFilter, this.getRecallSknStrategy(clazz, skn));
RecallRequestResponse recallRequestResponse = new RecallRequestResponse(recallRequest);
recallRequestResponse.setResponse(new RecallResponse(1L, Arrays.asList(skn)), false);
results.add(recallRequestResponse);
... ... @@ -96,8 +105,16 @@ public class SknRecallCacheBean {
return results;
}
private IRecallSknStrategy getRecallSknStrategy(Class<? extends IRecallSknStrategy> clazz, Integer skn) {
if (clazz.isAssignableFrom(RecommendSknStrategy.class)) {
return new RecommendSknStrategy(skn);
} else {
return new RealTimeSimilarSknStrategy(skn);
}
}
/**
* 从ehcache或者redis中构造返回结果
* 从ehcahc或者redis中构造返回结果
*
* @param userRecallRequest
* @param recommedSknList
... ...
package com.yoho.search.recall.scene.beans.strategy.impls;
import com.yoho.search.recall.scene.beans.strategy.StrategyEnum;
/**
* 推荐skn的召回策略
*
* @author gufei.hu
*
*/
public class RealTimeSimilarSknStrategy extends IRecallSknStrategy{
public RealTimeSimilarSknStrategy(Integer recommendSkn) {
super(recommendSkn);
}
@Override
public StrategyEnum strategtEnum() {
return StrategyEnum.RT_SIM_SKN;
}
}
package com.yoho.search.recall.scene.beans.strategy.impls;
import com.yoho.search.recall.scene.beans.strategy.StrategyEnum;
/**
* 推荐skn的召回策略
*
* @author gufei.hu
*
*/
public class RealTimeSimilarSknStrategy extends IRecallSknStrategy{
public RealTimeSimilarSknStrategy(Integer recommendSkn) {
super(recommendSkn);
}
@Override
public StrategyEnum strategtEnum() {
return StrategyEnum.RT_SIM_SKN;
}
}
... ...