丁云鹏 7 months ago
parent
commit
8275edcca6

+ 58 - 67
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/FlowPoolWithLevelRecallStrategyTomson.java

@@ -116,74 +116,65 @@ public class FlowPoolWithLevelRecallStrategyTomson extends AbstractFlowPoolWithL
 
     @Override
     public List<Video> recall(RecallParam param) {
-        try {
-
-
-            Pair<String, String> flowPoolKeyAndLevel = flowPoolKeyAndLevel(param);
-            String flowPoolKey = flowPoolKeyAndLevel.getLeft();
-            String level = flowPoolKeyAndLevel.getRight();
-            Set<String> data = redisTemplate.opsForSet().members(flowPoolKey);
-            if (CollectionUtils.isEmpty(data)) {
-                return null;
-            }
-            Map<String, String> videoFlowPoolMap = new LinkedHashMap<>();
-            Map<Long, String> videoFlowPoolMap_ = new LinkedHashMap<>();
-            for (String value : data) {
-                String[] values = value.split("-");
-                videoFlowPoolMap.put(values[0], values[1]);
-                videoFlowPoolMap_.put(NumberUtils.toLong(values[0], 0), values[1]);
-            }
-            Map<Long, Double> resultmap = null;
-            if ("1".equals(level) && ifOneLevelRandom) {
-                // 流量池一层改为全随机
-                int limitSize = 60;
-                List<Long> keyList = new ArrayList<>(videoFlowPoolMap_.keySet());
-                Collections.shuffle(keyList);
-                resultmap = keyList.stream().limit(limitSize).collect(Collectors.toMap(
-                        key -> key,
-                        key -> Math.random()
-                ));
-            } else {
-                ScorerPipeline4Recall pipeline = ScorerUtils.getScorerPipeline4Recall("feeds_recall_config_tomson.conf");
-                List<List<Pair<Long, Double>>> results = pipeline.recall(videoFlowPoolMap);
-                List<Pair<Long, Double>> result = results.get(0);
-                resultmap = result.stream()
-                        .collect(Collectors.toMap(
-                                Pair::getLeft, // 键是Pair的left值
-                                Pair::getRight, // 值是Pair的right值
-                                (existingValue, newValue) -> existingValue, // 如果键冲突,选择保留现有的值(或者你可以根据需要定义其他合并策略)
-                                LinkedHashMap::new // 使用LinkedHashMap来保持插入顺序(如果需要的话)
-                        ));
-            }
-
-            // 3 召回内部过滤
-            FilterParam filterParam = FilterParamFactory.create(param, new ArrayList<>(resultmap.keySet()));
-            filterParam.setForceTruncation(10000);
-            filterParam.setConcurrent(true);
-            filterParam.setNotUsePreView(false);
-            FilterResult filterResult = filterService.filter(filterParam);
-            List<Video> videosResult = new ArrayList<>();
-            if (filterResult != null && CollectionUtils.isNotEmpty(filterResult.getVideoIds())) {
-                Map<Long, Double> finalResultmap = resultmap;
-                filterResult.getVideoIds().forEach(vid -> {
-                    Video recallData = new Video();
-                    recallData.setVideoId(vid);
-                    recallData.setAbCode(param.getAbCode());
-                    recallData.setRovScore(finalResultmap.getOrDefault(vid, 0.0));
-                    recallData.setPushFrom(pushFrom());
-                    recallData.setFlowPool(videoFlowPoolMap_.get(vid));
-                    recallData.setFlowPoolAbtestGroup(param.getFlowPoolAbtestGroup());
-                    recallData.setLevel(level);
-                    videosResult.add(recallData);
-                });
-            }
-            videosResult.sort(Comparator.comparingDouble(o -> -o.getRovScore()));
-
-            return videosResult;
+        Pair<String, String> flowPoolKeyAndLevel = flowPoolKeyAndLevel(param);
+        String flowPoolKey = flowPoolKeyAndLevel.getLeft();
+        String level = flowPoolKeyAndLevel.getRight();
+        Set<String> data = redisTemplate.opsForSet().members(flowPoolKey);
+        if (CollectionUtils.isEmpty(data)) {
+            return null;
+        }
+        Map<String, String> videoFlowPoolMap = new LinkedHashMap<>();
+        Map<Long, String> videoFlowPoolMap_ = new LinkedHashMap<>();
+        for (String value : data) {
+            String[] values = value.split("-");
+            videoFlowPoolMap.put(values[0], values[1]);
+            videoFlowPoolMap_.put(NumberUtils.toLong(values[0], 0), values[1]);
         }
-        catch (Exception e){
-            log.error("liuliangchi", e);
+        Map<Long, Double> resultmap = null;
+        if ("1".equals(level) && ifOneLevelRandom) {
+            // 流量池一层改为全随机
+            int limitSize = 60;
+            List<Long> keyList = new ArrayList<>(videoFlowPoolMap_.keySet());
+            Collections.shuffle(keyList);
+            resultmap = keyList.stream().limit(limitSize).collect(Collectors.toMap(
+                    key -> key,
+                    key -> Math.random()
+            ));
+        } else {
+            ScorerPipeline4Recall pipeline = ScorerUtils.getScorerPipeline4Recall("feeds_recall_config_tomson.conf");
+            List<List<Pair<Long, Double>>> results = pipeline.recall(videoFlowPoolMap);
+            List<Pair<Long, Double>> result = results.get(0);
+            resultmap = result.stream()
+                    .collect(Collectors.toMap(
+                            Pair::getLeft, // 键是Pair的left值
+                            Pair::getRight, // 值是Pair的right值
+                            (existingValue, newValue) -> existingValue, // 如果键冲突,选择保留现有的值(或者你可以根据需要定义其他合并策略)
+                            LinkedHashMap::new // 使用LinkedHashMap来保持插入顺序(如果需要的话)
+                    ));
+        }
+
+        // 3 召回内部过滤
+        FilterParam filterParam = FilterParamFactory.create(param, new ArrayList<>(resultmap.keySet()));
+        filterParam.setForceTruncation(10000);
+        filterParam.setConcurrent(true);
+        filterParam.setNotUsePreView(false);
+        FilterResult filterResult = filterService.filter(filterParam);
+        List<Video> videosResult = new ArrayList<>();
+        if (filterResult != null && CollectionUtils.isNotEmpty(filterResult.getVideoIds())) {
+            Map<Long, Double> finalResultmap = resultmap;
+            filterResult.getVideoIds().forEach(vid -> {
+                Video recallData = new Video();
+                recallData.setVideoId(vid);
+                recallData.setAbCode(param.getAbCode());
+                recallData.setRovScore(finalResultmap.getOrDefault(vid, 0.0));
+                recallData.setPushFrom(pushFrom());
+                recallData.setFlowPool(videoFlowPoolMap_.get(vid));
+                recallData.setFlowPoolAbtestGroup(param.getFlowPoolAbtestGroup());
+                recallData.setLevel(level);
+                videosResult.add(recallData);
+            });
         }
-        return Collections.emptyList();
+        videosResult.sort(Comparator.comparingDouble(o -> -o.getRovScore()));
+        return videosResult;
     }
 }