|
@@ -1,6 +1,7 @@
|
|
|
package com.tzld.piaoquan.recommend.server.service.rank;
|
|
|
|
|
|
|
|
|
+import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
|
|
|
import com.google.common.reflect.TypeToken;
|
|
|
import com.tzld.piaoquan.recommend.feature.domain.video.base.ItemFeature;
|
|
|
import com.tzld.piaoquan.recommend.feature.domain.video.base.RequestContext;
|
|
@@ -49,7 +50,8 @@ public class RankService {
|
|
|
private boolean newRankSwitch;
|
|
|
@Value("${newRankAbExpCode:528}")
|
|
|
private String newRankAbExpCode;
|
|
|
-
|
|
|
+ @ApolloJsonValue("${region.recall.return.size:{}}")
|
|
|
+ protected Map<String, Map<String, Integer>> regionRecallReturnSize;
|
|
|
|
|
|
public RankResult rank(RankParam param) {
|
|
|
if (param == null
|
|
@@ -81,7 +83,8 @@ public class RankService {
|
|
|
JSONUtils.toJson(flowPoolRank));
|
|
|
|
|
|
// 融合排序
|
|
|
- return mergeAndSort(param, rovRecallRank, flowPoolRank); }
|
|
|
+ return mergeAndSort(param, rovRecallRank, flowPoolRank);
|
|
|
+ }
|
|
|
|
|
|
public List<Video> mergeAndRankRovRecall(RankParam param) {
|
|
|
// TODO ab test
|
|
@@ -103,6 +106,14 @@ public class RankService {
|
|
|
rovRecallRank.addAll(extractAndSort(param, RegionRelative24HRecallStrategy.PUSH_FORM));
|
|
|
rovRecallRank.addAll(extractAndSort(param, RegionRelative24HDupRecallStrategy.PUSH_FORM));
|
|
|
|
|
|
+ // @zhangbo 增加不同召回子策略的返回数量-阿波罗:region.recall.return.size
|
|
|
+ String abCode = param.getAbCode();
|
|
|
+ int sizeReturn = param.getSize();
|
|
|
+ if (abCode != null && this.regionRecallReturnSize != null &&
|
|
|
+ this.regionRecallReturnSize.containsKey(abCode) &&
|
|
|
+ this.regionRecallReturnSize.get(abCode) != null ){
|
|
|
+ sizeReturn = this.regionRecallReturnSize.get(abCode).getOrDefault("result_size", sizeReturn);
|
|
|
+ }
|
|
|
|
|
|
if (param.getAbCode().equals("60054")
|
|
|
|| param.getAbCode().equals("60068")
|
|
@@ -118,37 +129,16 @@ public class RankService {
|
|
|
|| param.getAbCode().equals("60094")
|
|
|
|| param.getAbCode().equals("60095")
|
|
|
|| param.getAbCode().equals("60096")
|
|
|
- || param.getAbCode().equals("60097")) {
|
|
|
+ || param.getAbCode().equals("60097")
|
|
|
+ || param.getAbCode().equals("60098")
|
|
|
+ || param.getAbCode().equals("60103")
|
|
|
+ || param.getAbCode().equals("60104")
|
|
|
+ || param.getAbCode().equals("60105")) {
|
|
|
// 地域召回要做截取,再做融合排序
|
|
|
removeDuplicate(rovRecallRank);
|
|
|
- rovRecallRank = rovRecallRank.size() <= param.getSize()
|
|
|
+ rovRecallRank = rovRecallRank.size() <= sizeReturn
|
|
|
? rovRecallRank
|
|
|
- : rovRecallRank.subList(0, param.getSize());
|
|
|
-
|
|
|
- // merge sim recall 和 return recall
|
|
|
- rovRecallRank.addAll(extractAndSort(param, SimHotVideoRecallStrategy.PUSH_FORM));
|
|
|
- rovRecallRank.addAll(extractAndSort(param, ReturnVideoRecallStrategy.PUSH_FORM));
|
|
|
- removeDuplicate(rovRecallRank);
|
|
|
-
|
|
|
- // 融合排序
|
|
|
- List<String> videoIdKeys = rovRecallRank.stream()
|
|
|
- .map(t -> param.getRankKeyPrefix() + t.getVideoId())
|
|
|
- .collect(Collectors.toList());
|
|
|
- List<String> videoScores = redisTemplate.opsForValue().multiGet(videoIdKeys);
|
|
|
- log.info("rank mergeAndRankRovRecall videoIdKeys={}, videoScores={}", JSONUtils.toJson(videoIdKeys),
|
|
|
- JSONUtils.toJson(videoScores));
|
|
|
- if (CollectionUtils.isNotEmpty(videoScores)
|
|
|
- && videoScores.size() == rovRecallRank.size()) {
|
|
|
- for (int i = 0; i < videoScores.size(); i++) {
|
|
|
- rovRecallRank.get(i).setSortScore(NumberUtils.toDouble(videoScores.get(i), 0.0));
|
|
|
- }
|
|
|
- Collections.sort(rovRecallRank, Comparator.comparingDouble(o -> -o.getSortScore()));
|
|
|
- }
|
|
|
- }else if(param.getAbCode().equals("60098")) {
|
|
|
-
|
|
|
- int sizeNew = param.getSize();
|
|
|
- removeDuplicate(rovRecallRank);
|
|
|
- rovRecallRank = rovRecallRank.size() <= sizeNew ? rovRecallRank: rovRecallRank.subList(0, sizeNew);
|
|
|
+ : rovRecallRank.subList(0, sizeReturn);
|
|
|
|
|
|
// merge sim recall 和 return recall
|
|
|
rovRecallRank.addAll(extractAndSort(param, SimHotVideoRecallStrategy.PUSH_FORM));
|