|
|
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
|
...
|
...
|
|