丁云鹏 1 år sedan
förälder
incheckning
600a68ab30

+ 30 - 17
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/RankService.java

@@ -66,25 +66,8 @@ public class RankService {
         rovRecallRank.addAll(extractAndSort(param, Region24HRecallStrategy.PUSH_FORM));
         rovRecallRank.addAll(extractAndSort(param, RegionRelative24HRecallStrategy.PUSH_FORM));
         rovRecallRank.addAll(extractAndSort(param, RegionRelative24HDupRecallStrategy.PUSH_FORM));
-        // TODO 为什么sim recall 和 return recall 不去重
-        rovRecallRank.addAll(extractAndSort(param, SimHotVideoRecallStrategy.PUSH_FORM));
-        rovRecallRank.addAll(extractAndSort(param, ReturnVideoRecallStrategy.PUSH_FORM));
 
-        // 去重
-        if (CollectionUtils.isNotEmpty(rovRecallRank)) {
-            Set<Long> videoIds = new HashSet<>();
-            Iterator<Video> ite = rovRecallRank.iterator();
-            while (ite.hasNext()) {
-                Video v = ite.next();
-                if (videoIds.contains(v.getVideoId())) {
-                    ite.remove();
-                    continue;
-                }
-                videoIds.add(v.getVideoId());
-            }
-        }
 
-        // 排序实验
         if (param.getAbCode().equals("60054")
                 || param.getAbCode().equals("60068")
                 || param.getAbCode().equals("60081")
@@ -99,7 +82,18 @@ public class RankService {
                 || param.getAbCode().equals("60094")
                 || param.getAbCode().equals("60095")
                 || param.getAbCode().equals("60096")) {
+            // 地域召回要做截取,再做融合排序
+            removeDuplicate(rovRecallRank);
+            rovRecallRank = rovRecallRank.size() <= param.getSize()
+                    ? 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());
@@ -113,10 +107,29 @@ public class RankService {
                 }
                 Collections.sort(rovRecallRank, Comparator.comparingDouble(o -> -o.getSortScore()));
             }
+        } else {
+            rovRecallRank.addAll(extractAndSort(param, SimHotVideoRecallStrategy.PUSH_FORM));
+            rovRecallRank.addAll(extractAndSort(param, ReturnVideoRecallStrategy.PUSH_FORM));
+            removeDuplicate(rovRecallRank);
         }
         return rovRecallRank;
     }
 
+    private void removeDuplicate(List<Video> rovRecallRank) {
+        if (CollectionUtils.isNotEmpty(rovRecallRank)) {
+            Set<Long> videoIds = new HashSet<>();
+            Iterator<Video> ite = rovRecallRank.iterator();
+            while (ite.hasNext()) {
+                Video v = ite.next();
+                if (videoIds.contains(v.getVideoId())) {
+                    ite.remove();
+                    continue;
+                }
+                videoIds.add(v.getVideoId());
+            }
+        }
+    }
+
     private List<Video> mergeAndRankFlowPoolRecall(RankParam param) {
         if (param.getAppType() == AppTypeEnum.LAO_HAO_KAN_VIDEO.getCode()
                 || param.getAppType() == AppTypeEnum.ZUI_JING_QI.getCode()) {