Selaa lähdekoodia

Merge remote-tracking branch 'origin/feature_20240507_supeng_supply_ab' into pre-master

supeng 1 vuosi sitten
vanhempi
commit
ff3fc72056

+ 0 - 3
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/RecommendService.java

@@ -98,9 +98,6 @@ public class RecommendService {
 
     @PostConstruct
     public void init() {
-        ab_initial_config_map.put(AppTypeEnum.VLOG.getCode(), "095");
-        ab_initial_config_map.put(AppTypeEnum.LOVE_LIVE.getCode(), "144");
-        ab_initial_config_map.put(AppTypeEnum.LONG_VIDEO.getCode(), "121");
     }
 
     public RecommendResponse homepageRecommend(RecommendRequest request) {

+ 4 - 22
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/strategy/AllowListStrategy.java

@@ -67,29 +67,11 @@ public class AllowListStrategy implements FilterStrategy {
         }
         //不是新小程序 在白名单则不显示
         Set<Long> retainVideoIds = new LinkedHashSet<>();
-        if (param.getAppType() != AppTypeEnum.WAN_NENG_VIDEO.getCode()
-                && param.getAppType() != AppTypeEnum.H5.getCode()) {
-
-            Iterator<Long> iterator = param.getVideoIds().iterator();
-            while (iterator.hasNext()) {
-                Long videoId = iterator.next();
-                //如果不在新小程序白名单 则保留
-                if (!isMemberOfVideoAllowList(videoId)) {
-                    retainVideoIds.add(videoId);
-                }
-            }
-        } else if (param.getAppType() == AppTypeEnum.WAN_NENG_VIDEO.getCode()
-                || param.getAppType() == AppTypeEnum.H5.getCode()) {
-            Iterator<Long> iterator = param.getVideoIds().iterator();
-            while (iterator.hasNext()) {
-                Long videoId = iterator.next();
-                //如果不在宗教白名单 则保留
-                if (!isMemberOfReligionVideoAllowList(videoId)) {
-                    retainVideoIds.add(videoId);
-                }
+        for (Long videoId : param.getVideoIds()) {
+            //如果不在新小程序白名单 则保留
+            if (!isMemberOfVideoAllowList(videoId)) {
+                retainVideoIds.add(videoId);
             }
-        } else {
-            return Lists.newArrayList(param.getVideoIds());
         }
         if (CollectionUtils.isEmpty(retainVideoIds)) {
             return Collections.emptyList();

+ 21 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/RankService.java

@@ -45,6 +45,8 @@ public class RankService {
     private boolean newRankSwitch;
     @Value("${newRankAbExpCode:528}")
     private String newRankAbExpCode;
+    @ApolloJsonValue("${alg.recall.special.app&vid:{}}")
+    protected Map<String, List<Long>> specialAppVid;
     @ApolloJsonValue("${region.recall.return.size:{}}")
     protected Map<String, Map<String, Integer>> regionRecallReturnSize;
 
@@ -82,7 +84,13 @@ public class RankService {
             }
             return new RankResult(results);
         }
-
+        if (this.matchSpecialApp(param.getAppType())){
+            // 特殊app固定列表,只有一路召回,且不走排序。
+            List<Video> results = new ArrayList<>(extractAndSort(param, RegionRealtimeRecallStrategyV5Hand.PUSH_FORM));
+            removeDuplicate(results);
+            results = results.subList(0, Math.min(results.size(), param.getSize()));
+            return new RankResult(results);
+        }
         if (param.getAppType() == AppTypeEnum.APP_SPEED.getCode()) {
             List<Video> results = new ArrayList<>(extractAndSort(param, AppFallbackRecallStrategy.PUSH_FORM));
             removeDuplicate(results);
@@ -397,5 +405,17 @@ public class RankService {
         return new RankResult(result);
     }
 
+    private boolean matchSpecialApp(int appId){
+        Set<Integer> notSpecialApp = new HashSet<>(Arrays.asList(0, 4, 5));
+        if (notSpecialApp.contains(appId)){
+            // vlog 票圈视频 内容精选 不允许走特殊列表,即使配置了也无效。
+            return false;
+        }
+        if (specialAppVid != null && specialAppVid.getOrDefault("app", new ArrayList<>()).contains((long) appId)){
+            log.info("This request hits a special logic in matchSpecialApp with appId={}", appId);
+            return true;
+        }
+        return false;
+    }
 
 }

+ 132 - 115
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/RecallService.java

@@ -35,6 +35,8 @@ public class RecallService implements ApplicationContextAware {
     private final ExecutorService pool = ThreadPoolFactory.recallPool();
     @ApolloJsonValue("${last.digit.abcode:{}}")
     protected Map<Integer, String> lastDigitAbcode;
+    @ApolloJsonValue("${alg.recall.special.app&vid:{}}")
+    protected Map<String, List<Long>> specialAppVid;
     @Resource
     private BlacklistContainer blacklistContainer;
 
@@ -58,10 +60,8 @@ public class RecallService implements ApplicationContextAware {
         CountDownLatch cdl = new CountDownLatch(strategies.size());
         List<Future<RecallResult.RecallData>> recallResultFutures = new ArrayList<>();
         for (final RecallStrategy strategy : strategies) {
-            log.info("supply flowpool strategy = {}", strategy.getClass().toString());
             Future<RecallResult.RecallData> future = pool.submit(() -> {
                 List<Video> result = strategy.recall(param);
-                log.info("supply flowpool strategy = {}, result = {}", strategy.getClass().toString(), result);
                 cdl.countDown();
                 return new RecallResult.RecallData(strategy.pushFrom(), result);
             });
@@ -100,129 +100,133 @@ public class RecallService implements ApplicationContextAware {
         boolean isInBlacklist = CollectionUtils.isNotEmpty(blacklistAppTypeSet) && blacklistAppTypeSet.contains(param.getAppType());
 
         String abCode = param.getAbCode();
-        //1:通过“产品”控制“召回子策略”. 票圈美好祝福与内部tab只走祝福召回。APP只走固定列表。
+        //1:通过“产品”控制“召回子策略”. 票圈美好祝福与内部tab只走祝福召回。APP只走固定列表。特殊配置的app只有固定召回列表。
+        if (this.matchSpecialApp(param.getAppType())) {
+            strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV5Hand.class.getSimpleName()));
+            return strategies;
+        }
         if (param.getAppType() == AppTypeEnum.PIAO_QUAN_MEIHAO_ZHUFU.getCode() && Objects.equals(param.getCategoryId(), 100)) {
             strategies.add(strategyMap.get(BlessRecallStrategy.class.getSimpleName()));
             return strategies;
-        } else if (param.getAppType() == AppTypeEnum.APP_SPEED.getCode()) {
+        }
+        if (param.getAppType() == AppTypeEnum.APP_SPEED.getCode()) {
             strategies.add(strategyMap.get(AppFallbackRecallStrategy.class.getSimpleName()));
             return strategies;
-        } else {
-            switch (abCode) {
-                case "60113": // 563
-                case "60114": // 564
-                case "60115": // 565
-                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV1.class.getSimpleName()));
-                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV2_sort.class.getSimpleName()));
-                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV3.class.getSimpleName()));
-                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV4.class.getSimpleName()));
-                    strategies.addAll(getRegionRecallStrategy(param));
-                    break;
-                case "60105": // 551
-                case "60106": // 552
-                case "60107": // 553
-                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV1_sort.class.getSimpleName()));
-                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV2_sort.class.getSimpleName()));
-                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV3_sort.class.getSimpleName()));
-                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV4.class.getSimpleName()));
-                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV6RootRov.class.getSimpleName()));
-                    strategies.addAll(getRegionRecallStrategy(param));
-                    break;
-                case "60121": // 536
-                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV1.class.getSimpleName()));
-                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV2.class.getSimpleName()));
-                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV3.class.getSimpleName()));
-                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV4.class.getSimpleName()));
-                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV5HighValue.class.getSimpleName()));
-                    strategies.addAll(getRegionRecallStrategy(param));
-                    break;
-                case "60122": // 537
-                case "60124": // 546
-                case "60125": // 547
-                case "60126": // 548
-                case "60116": // 566
-                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV1.class.getSimpleName()));
-                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV2.class.getSimpleName()));
-                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV3.class.getSimpleName()));
-                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV4.class.getSimpleName()));
-                    strategies.addAll(getRegionRecallStrategy(param));
-                    break;
-                case "60120": // 576
-                case "60123": // 541
-                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV1.class.getSimpleName()));
-                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV2.class.getSimpleName()));
-                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV3.class.getSimpleName()));
-                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV4.class.getSimpleName()));
-                    break;
-                case "60150": // 645
-                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV1.class.getSimpleName()));
-                    strategies.add(strategyMap.get(ShareWidthRecallStrategy.class.getSimpleName()));
-                    strategies.add(strategyMap.get(ShareDeepRecallStrategy.class.getSimpleName()));
-                    break;
-                case "60151": // 650
-                    strategies.addAll(getRegionRecallStrategy(param));
-                    strategies.add(strategyMap.get(SimHotVideoRecallStrategy.class.getSimpleName()));
-                    strategies.add(strategyMap.get(ReturnVideoRecallStrategy.class.getSimpleName()));
-                    strategies.add(strategyMap.get(ContentBaseRecallStrategy.class.getSimpleName()));
-                    strategies.add(strategyMap.get(FestivalRecallStrategyV1.class.getSimpleName()));
-                    break;
-                case "60117": // 567
-                case "60118": // 568
-                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV1.class.getSimpleName()));
-                    strategies.addAll(getRegionRecallStrategy(param));
-                case "60119": // 569
-                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV1.class.getSimpleName()));
-                    strategies.add(strategyMap.get(TitleTagRecallStrategyV1.class.getSimpleName()));
-                    strategies.addAll(getRegionRecallStrategy(param));
-                default:
-                    strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV1.class.getSimpleName()));
-                    strategies.addAll(getRegionRecallStrategy(param));
-            }
-            // 命中用户黑名单不走流量池
-            if (!hitUserBlacklist || !isInBlacklist) {
-                if (Objects.equals(Constant.SUPPLY_AB_CODE, abCode)) {
-                    // 供给流量池策略 648 实验 random
-                    strategies.add(strategyMap.get(FlowPoolWithLevelSupplyRecallStrategy.class.getSimpleName()));
-                    log.info("supply flowpool {}", abCode);
+        }
+        switch (abCode) {
+            case "60113": // 563
+            case "60114": // 564
+            case "60115": // 565
+                strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV1.class.getSimpleName()));
+                strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV2_sort.class.getSimpleName()));
+                strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV3.class.getSimpleName()));
+                strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV4.class.getSimpleName()));
+                strategies.addAll(getRegionRecallStrategy(param));
+                break;
+            case "60105": // 551
+            case "60106": // 552
+            case "60107": // 553
+                strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV1_sort.class.getSimpleName()));
+                strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV2_sort.class.getSimpleName()));
+                strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV3_sort.class.getSimpleName()));
+                strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV4.class.getSimpleName()));
+                strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV6RootRov.class.getSimpleName()));
+                strategies.addAll(getRegionRecallStrategy(param));
+                break;
+            case "60121": // 536
+                strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV1.class.getSimpleName()));
+                strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV2.class.getSimpleName()));
+                strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV3.class.getSimpleName()));
+                strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV4.class.getSimpleName()));
+                strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV5HighValue.class.getSimpleName()));
+                strategies.addAll(getRegionRecallStrategy(param));
+                break;
+            case "60122": // 537
+            case "60124": // 546
+            case "60125": // 547
+            case "60126": // 548
+            case "60116": // 566
+                strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV1.class.getSimpleName()));
+                strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV2.class.getSimpleName()));
+                strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV3.class.getSimpleName()));
+                strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV4.class.getSimpleName()));
+                strategies.addAll(getRegionRecallStrategy(param));
+                break;
+            case "60120": // 576
+            case "60123": // 541
+                strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV1.class.getSimpleName()));
+                strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV2.class.getSimpleName()));
+                strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV3.class.getSimpleName()));
+                strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV4.class.getSimpleName()));
+                break;
+            case "60150": // 645
+                strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV1.class.getSimpleName()));
+                strategies.add(strategyMap.get(ShareWidthRecallStrategy.class.getSimpleName()));
+                strategies.add(strategyMap.get(ShareDeepRecallStrategy.class.getSimpleName()));
+                break;
+            case "60151": // 650
+                strategies.addAll(getRegionRecallStrategy(param));
+                strategies.add(strategyMap.get(SimHotVideoRecallStrategy.class.getSimpleName()));
+                strategies.add(strategyMap.get(ReturnVideoRecallStrategy.class.getSimpleName()));
+                strategies.add(strategyMap.get(ContentBaseRecallStrategy.class.getSimpleName()));
+                strategies.add(strategyMap.get(FestivalRecallStrategyV1.class.getSimpleName()));
+                break;
+            case "60117": // 567
+            case "60118": // 568
+                strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV1.class.getSimpleName()));
+                strategies.addAll(getRegionRecallStrategy(param));
+            case "60119": // 569
+                strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV1.class.getSimpleName()));
+                strategies.add(strategyMap.get(TitleTagRecallStrategyV1.class.getSimpleName()));
+                strategies.addAll(getRegionRecallStrategy(param));
+            default:
+                strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV1.class.getSimpleName()));
+                strategies.addAll(getRegionRecallStrategy(param));
+        }
+        // 命中用户黑名单不走流量池
+        if (!hitUserBlacklist || !isInBlacklist) {
+            if (Objects.equals(Constant.SUPPLY_AB_CODE, abCode)) {
+                // 供给流量池策略 648 实验 random
+                strategies.add(strategyMap.get(FlowPoolWithLevelSupplyRecallStrategy.class.getSimpleName()));
                 //2:通过“流量池标记”控制“流量池召回子策略” 其中有9组会走EXPERIMENTAL_FLOW_SET_LEVEL 有1组会走EXPERIMENTAL_FLOW_SET_LEVEL_SCORE
-                } else if ("60116".equals(abCode)) {
-                    int lastDigit = param.getLastDigit();
-                    String lastDigitAB = lastDigitAbcode != null ? lastDigitAbcode.getOrDefault(lastDigit, "default") : "default";
-                    switch (lastDigitAB) {
-                        case "random":
-                            strategies.add(strategyMap.get(FlowPoolWithLevelRecallStrategyFilterDigit.class.getSimpleName()));
-                            break;
-                        case "tomson":
-                            strategies.add(strategyMap.get(FlowPoolWithLevelRecallStrategyTomsonFilterDigitV2.class.getSimpleName()));
-                            break;
-                        case "score":
-                            strategies.add(strategyMap.get(FlowPoolWithLevelScoreRecallStrategy.class.getSimpleName()));
-                            break;
-                        default:
-                            strategies.add(strategyMap.get(FlowPoolWithLevelRecallStrategyFilterDigit.class.getSimpleName()));
-                            break;
-                    }
-                } else {
-                    if (param.getFlowPoolAbtestGroup().equals(FlowPoolConstants.EXPERIMENTAL_FLOW_SET_LEVEL)) {
-                        strategies.add(strategyMap.get(QuickFlowPoolWithLevelRecallStrategy.class.getSimpleName()));
-                        if ("60126".equals(abCode) || "60125".equals(abCode) || "60124".equals(abCode)
-                                || "60105".equals(abCode) || "60106".equals(abCode) || "60107".equals(abCode)
-                                || "60113".equals(abCode) || "60114".equals(abCode)
-                                || "60115".equals(abCode) || "60117".equals(abCode) || "60118".equals(abCode)
-                                || "60119".equals(abCode) || "60150".equals(abCode) || "60151".equals(abCode)) {
-                            strategies.add(strategyMap.get(FlowPoolWithLevelRecallStrategyTomson.class.getSimpleName()));
-                        } else {
-                            strategies.add(strategyMap.get(FlowPoolWithLevelRecallStrategy.class.getSimpleName()));
-                        }
-                    } else if (param.getFlowPoolAbtestGroup().equals(FlowPoolConstants.EXPERIMENTAL_FLOW_SET_LEVEL_SCORE)) {
-                        strategies.add(strategyMap.get(QuickFlowPoolWithLevelScoreRecallStrategy.class.getSimpleName()));
+            } else if ("60116".equals(abCode)) {
+                int lastDigit = param.getLastDigit();
+                String lastDigitAB = lastDigitAbcode != null ? lastDigitAbcode.getOrDefault(lastDigit, "default") : "default";
+                switch (lastDigitAB) {
+                    case "random":
+                        strategies.add(strategyMap.get(FlowPoolWithLevelRecallStrategyFilterDigit.class.getSimpleName()));
+                        break;
+                    case "tomson":
+                        strategies.add(strategyMap.get(FlowPoolWithLevelRecallStrategyTomsonFilterDigitV2.class.getSimpleName()));
+                        break;
+                    case "score":
                         strategies.add(strategyMap.get(FlowPoolWithLevelScoreRecallStrategy.class.getSimpleName()));
+                        break;
+                    default:
+                        strategies.add(strategyMap.get(FlowPoolWithLevelRecallStrategyFilterDigit.class.getSimpleName()));
+                        break;
+                }
+            } else {
+                if (param.getFlowPoolAbtestGroup().equals(FlowPoolConstants.EXPERIMENTAL_FLOW_SET_LEVEL)) {
+                    strategies.add(strategyMap.get(QuickFlowPoolWithLevelRecallStrategy.class.getSimpleName()));
+                    if ("60126".equals(abCode) || "60125".equals(abCode) || "60124".equals(abCode)
+                            || "60105".equals(abCode) || "60106".equals(abCode) || "60107".equals(abCode)
+                            || "60113".equals(abCode) || "60114".equals(abCode)
+                            || "60115".equals(abCode) || "60117".equals(abCode) || "60118".equals(abCode)
+                            || "60119".equals(abCode) || "60150".equals(abCode) || "60151".equals(abCode)) {
+                        strategies.add(strategyMap.get(FlowPoolWithLevelRecallStrategyTomson.class.getSimpleName()));
                     } else {
-                        strategies.add(strategyMap.get(QuickFlowPoolWithScoreRecallStrategy.class.getSimpleName()));
-                        strategies.add(strategyMap.get(FlowPoolWithScoreRecallStrategy.class.getSimpleName()));
+                        strategies.add(strategyMap.get(FlowPoolWithLevelRecallStrategy.class.getSimpleName()));
                     }
+                } else if (param.getFlowPoolAbtestGroup().equals(FlowPoolConstants.EXPERIMENTAL_FLOW_SET_LEVEL_SCORE)) {
+                    strategies.add(strategyMap.get(QuickFlowPoolWithLevelScoreRecallStrategy.class.getSimpleName()));
+                    strategies.add(strategyMap.get(FlowPoolWithLevelScoreRecallStrategy.class.getSimpleName()));
+                } else {
+                    strategies.add(strategyMap.get(QuickFlowPoolWithScoreRecallStrategy.class.getSimpleName()));
+                    strategies.add(strategyMap.get(FlowPoolWithScoreRecallStrategy.class.getSimpleName()));
                 }
             }
+        }
 //            if ("60126".equals(abCode) || "60125".equals(abCode) || "60124".equals(abCode)
 //            || "60105".equals(abCode) || "60106".equals(abCode)  || "60107".equals(abCode)
 //            || "60113".equals(abCode) || "60114".equals(abCode)
@@ -246,7 +250,7 @@ public class RecallService implements ApplicationContextAware {
 //                        break;
 //                }
 //            }
-        }
+
 
         //3:通过“abcode”控制“召回子策略”
         switch (abCode) {
@@ -347,4 +351,17 @@ public class RecallService implements ApplicationContextAware {
     public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
         this.applicationContext = applicationContext;
     }
+
+    private boolean matchSpecialApp(int appId){
+        Set<Integer> notSpecialApp = new HashSet<>(Arrays.asList(0, 4, 5));
+        if (notSpecialApp.contains(appId)){
+            // vlog 票圈视频 内容精选 不允许走特殊列表,即使配置了也无效。
+            return false;
+        }
+        if (specialAppVid != null && specialAppVid.getOrDefault("app", new ArrayList<>()).contains((long) appId)){
+            log.info("This request hits a special logic in matchSpecialApp with appId={}", appId);
+            return true;
+        }
+        return false;
+    }
 }

+ 0 - 3
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/AbstractFlowPoolWithLevelRecallStrategy.java

@@ -40,7 +40,6 @@ public abstract class AbstractFlowPoolWithLevelRecallStrategy implements RecallS
         int getSize = param.getSize() * 5;
         List<Video> results = new ArrayList<>();
         List<String> data = redisTemplate.opsForSet().randomMembers(flowPoolKey, getSize);
-        log.info("supply flowpool flowPoolKey = {} level = {} data = {}", flowPoolKey, level, data);
         if (CollectionUtils.isEmpty(data)) {
             return null;
         }
@@ -49,9 +48,7 @@ public abstract class AbstractFlowPoolWithLevelRecallStrategy implements RecallS
             String[] values = value.split("-");
             videoFlowPoolMap.put(NumberUtils.toLong(values[0], 0), values[1]);
         }
-        log.info("supply flowpool videoFlowPoolMap = {}", videoFlowPoolMap);
         FilterResult filterResult = filterService.filter(FilterParamFactory.create(param, videoFlowPoolMap));
-        log.info("supply flowpool filterResult = {}", filterResult);
         if (filterResult != null && CollectionUtils.isNotEmpty(filterResult.getVideoIds())) {
             filterResult.getVideoIds().stream().forEach(vid -> {
                 Video recallData = new Video();

+ 0 - 4
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/FlowPoolWithLevelSupplyRecallStrategy.java

@@ -28,12 +28,10 @@ public class FlowPoolWithLevelSupplyRecallStrategy extends AbstractFlowPoolWithL
     Pair<String, String> flowPoolKeyAndLevel(RecallParam param) {
         //# 1. 获取流量池各层级分发概率权重
         Map<String, Double> levelWeightMap = flowPoolConfigService.getLevelWeight();
-        log.info("supply flowpool levelWeightMap = {}", levelWeightMap);
         // 2. 判断各层级是否有视频需分发
         List<LevelWeight> availableLevels = new ArrayList<>();
         for (Map.Entry<String, Double> entry : levelWeightMap.entrySet()) {
             String levelKey = String.format(KEY_WITH_LEVEL_SUPPLY_FORMAT, param.getAppType(), entry.getKey());
-            log.info("supply flowpool levelKey = {}", levelKey);
             if (redisTemplate.hasKey(levelKey)) {
                 LevelWeight lw = new LevelWeight();
                 lw.setLevel(entry.getKey());
@@ -42,7 +40,6 @@ public class FlowPoolWithLevelSupplyRecallStrategy extends AbstractFlowPoolWithL
                 availableLevels.add(lw);
             }
         }
-        log.info("supply flowpool availableLevels = {}", availableLevels);
         if (CollectionUtils.isEmpty(availableLevels)) {
             return Pair.of("", "");
         }
@@ -74,7 +71,6 @@ public class FlowPoolWithLevelSupplyRecallStrategy extends AbstractFlowPoolWithL
         for (Map.Entry<String, LevelP> entry : level_p_mapping.entrySet()) {
             if (random_p >= entry.getValue().getMin()
                     && random_p <= entry.getValue().getMax()) {
-                log.info("supply flowpool result {} {}", entry.getKey(), entry.getValue());
                 return Pair.of(entry.getValue().getLevelKey(), entry.getKey());
             }
         }

+ 8 - 11
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/RegionRealtimeRecallStrategyV5Hand.java

@@ -28,24 +28,18 @@ import java.util.*;
 public class RegionRealtimeRecallStrategyV5Hand implements RecallStrategy {
     @ApolloJsonValue("${alg.recall.hand.videos:[]}")
     private List<Long> handVideos;
+    @ApolloJsonValue("${alg.recall.special.app&vid:{}}")
+    protected Map<String, List<Long>> specialAppVid;
     @Autowired
     protected RegionFilterService filterService;
     @Override
     public List<Video> recall(RecallParam param) {
-        List<Long> vids = handVideos != null ? handVideos : new ArrayList<>();
+        List<Long> vids = specialAppVid != null ? specialAppVid.getOrDefault("vid", new ArrayList<>()) : new ArrayList<>();
         List<Video> videosResult = new ArrayList<>();
         if (vids.isEmpty()){
             return videosResult;
         }
-        FilterParam filterParam = FilterParamFactory.create(param, vids);
-        filterParam.setForceTruncation(10000);
-        filterParam.setConcurrent(true);
-        filterParam.setNotUsePreView(false);
-        FilterResult filterResult = filterService.filter(filterParam);
-        if (filterResult == null || filterResult.getVideoIds().isEmpty()){
-            return videosResult;
-        }
-        filterResult.getVideoIds().forEach(vid -> {
+        vids.forEach(vid -> {
             Video video = new Video();
             video.setVideoId(vid);
             video.setAbCode(param.getAbCode());
@@ -54,7 +48,10 @@ public class RegionRealtimeRecallStrategyV5Hand implements RecallStrategy {
             videosResult.add(video);
         });
         videosResult.sort(Comparator.comparingDouble(o -> -o.getRovScore()));
-        return videosResult;
+        long limit = specialAppVid != null ? specialAppVid.getOrDefault("limit", new ArrayList<>(
+                Collections.singletonList(1000L)
+        )).get(0) : 1000L;
+        return videosResult.subList(0, (int) Math.min(videosResult.size(), limit));
     }
     public static final String PUSH_FORM = "recall_strategy_hand";
     @Override