|
@@ -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;
|
|
|
|
|
@@ -98,128 +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()));
|
|
|
+ }
|
|
|
+ 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)
|
|
@@ -243,7 +250,7 @@ public class RecallService implements ApplicationContextAware {
|
|
|
// break;
|
|
|
// }
|
|
|
// }
|
|
|
- }
|
|
|
+
|
|
|
|
|
|
//3:通过“abcode”控制“召回子策略”
|
|
|
switch (abCode) {
|
|
@@ -344,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;
|
|
|
+ }
|
|
|
}
|