|
@@ -1,6 +1,7 @@
|
|
|
package com.tzld.piaoquan.recommend.server.service.recall;
|
|
|
import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
|
|
|
import com.tzld.piaoquan.recommend.server.common.ThreadPoolFactory;
|
|
|
+import com.tzld.piaoquan.recommend.server.common.base.Constant;
|
|
|
import com.tzld.piaoquan.recommend.server.common.enums.AppTypeEnum;
|
|
|
import com.tzld.piaoquan.recommend.server.model.Video;
|
|
|
import com.tzld.piaoquan.recommend.server.service.filter.strategy.BlacklistContainer;
|
|
@@ -57,8 +58,10 @@ 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);
|
|
|
});
|
|
@@ -97,11 +100,8 @@ public class RecallService implements ApplicationContextAware {
|
|
|
boolean isInBlacklist = CollectionUtils.isNotEmpty(blacklistAppTypeSet) && blacklistAppTypeSet.contains(param.getAppType());
|
|
|
|
|
|
String abCode = param.getAbCode();
|
|
|
- //1:通过“产品”控制“召回子策略”
|
|
|
- if (param.getAppType() == AppTypeEnum.LAO_HAO_KAN_VIDEO.getCode()
|
|
|
- || param.getAppType() == AppTypeEnum.ZUI_JING_QI.getCode()) {
|
|
|
- strategies.addAll(getRegionRecallStrategy(param));
|
|
|
- } else if (param.getAppType() == AppTypeEnum.PIAO_QUAN_MEIHAO_ZHUFU.getCode() && Objects.equals(param.getCategoryId(), 100)) {
|
|
|
+ //1:通过“产品”控制“召回子策略”. 票圈美好祝福与内部tab只走祝福召回。APP只走固定列表。
|
|
|
+ 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()) {
|
|
@@ -175,12 +175,17 @@ public class RecallService implements ApplicationContextAware {
|
|
|
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);
|
|
|
//2:通过“流量池标记”控制“流量池召回子策略” 其中有9组会走EXPERIMENTAL_FLOW_SET_LEVEL 有1组会走EXPERIMENTAL_FLOW_SET_LEVEL_SCORE
|
|
|
- if ("60116".equals(abCode)) {
|
|
|
+ } else if ("60116".equals(abCode)) {
|
|
|
int lastDigit = param.getLastDigit();
|
|
|
String lastDigitAB = lastDigitAbcode != null ? lastDigitAbcode.getOrDefault(lastDigit, "default") : "default";
|
|
|
switch (lastDigitAB) {
|
|
@@ -244,84 +249,81 @@ public class RecallService implements ApplicationContextAware {
|
|
|
}
|
|
|
|
|
|
//3:通过“abcode”控制“召回子策略”
|
|
|
-
|
|
|
- if (abCode == null) {
|
|
|
- // todo 做兜底吗?
|
|
|
- } else {
|
|
|
- switch (abCode) {
|
|
|
- case "60096":
|
|
|
- strategies.add(strategyMap.get(RegionHWithoutDupRecallStrategy.class.getSimpleName()));
|
|
|
- strategies.add(strategyMap.get(SimHotVideoRecallStrategy.class.getSimpleName()));
|
|
|
- strategies.add(strategyMap.get(ReturnVideoRecallStrategy.class.getSimpleName()));
|
|
|
- break;
|
|
|
- case "60111": // 561
|
|
|
- case "60068":
|
|
|
- case "60092":
|
|
|
- case "60094":
|
|
|
- case "60097": // 523
|
|
|
- case "60098": // 533
|
|
|
- case "60101": // 排序str实验
|
|
|
- case "60102": // 通过更改param中的配置实现使用不同数据源 data66 rule68 + 无排序模块
|
|
|
- case "60103": // 增加地域1小时扩量,通过配置实现
|
|
|
- case "60120": // 576
|
|
|
- strategies.add(strategyMap.get(SimHotVideoRecallStrategy.class.getSimpleName()));
|
|
|
- strategies.add(strategyMap.get(ReturnVideoRecallStrategy.class.getSimpleName()));
|
|
|
- break;
|
|
|
- case "60112": // 562
|
|
|
- strategies.add(strategyMap.get(SimHotVideoRecallStrategy.class.getSimpleName()));
|
|
|
- strategies.add(strategyMap.get(ReturnVideoRecallStrategy.class.getSimpleName()));
|
|
|
- strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV5Hand.class.getSimpleName()));
|
|
|
- break;
|
|
|
- case "60121": // 536
|
|
|
- case "60122": // 537
|
|
|
- case "60124": // 546
|
|
|
- case "60125": // 547
|
|
|
- case "60123": // 541
|
|
|
- case "60126": // 548
|
|
|
- case "60105": // 551
|
|
|
- case "60106": // 552
|
|
|
- case "60107": // 553
|
|
|
- case "60116": // 566
|
|
|
- case "60119": // 569
|
|
|
- strategies.add(strategyMap.get(SimHotVideoRecallStrategy.class.getSimpleName()));
|
|
|
- strategies.add(strategyMap.get(ReturnVideoRecallStrategy.class.getSimpleName()));
|
|
|
- strategies.add(strategyMap.get(FestivalRecallStrategyV1.class.getSimpleName()));
|
|
|
- break;
|
|
|
- case "60113": // 563
|
|
|
- case "60114": // 564
|
|
|
- case "60115": // 565
|
|
|
- case "60117": // 567
|
|
|
- case "60118": // 568
|
|
|
- case "60150": // 645
|
|
|
- if (!hitUserBlacklist || !isInBlacklist) {
|
|
|
- strategies.add(strategyMap.get(FlowPoolLastDayTopRecallStrategy.class.getSimpleName()));
|
|
|
- }
|
|
|
- strategies.add(strategyMap.get(SimHotVideoRecallStrategy.class.getSimpleName()));
|
|
|
- strategies.add(strategyMap.get(ReturnVideoRecallStrategy.class.getSimpleName()));
|
|
|
- strategies.add(strategyMap.get(FestivalRecallStrategyV1.class.getSimpleName()));
|
|
|
- break;
|
|
|
- case "60104": // 去掉sim的对比实验
|
|
|
- strategies.add(strategyMap.get(ReturnVideoRecallStrategy.class.getSimpleName()));
|
|
|
- break;
|
|
|
- case "60110": // 新内容的召回(流量池的Top内容)
|
|
|
- strategies.add(strategyMap.get(TopGoodPerformanceVideoRecallStrategy.class.getSimpleName()));
|
|
|
- if (!hitUserBlacklist || !isInBlacklist) {
|
|
|
- strategies.add(strategyMap.get(FlowPoolLastDayTopRecallStrategy.class.getSimpleName()));
|
|
|
- }
|
|
|
- strategies.add(strategyMap.get(SimHotVideoRecallStrategy.class.getSimpleName()));
|
|
|
- strategies.add(strategyMap.get(ReturnVideoRecallStrategy.class.getSimpleName()));
|
|
|
- break;
|
|
|
- case "60130":
|
|
|
- case "60131":
|
|
|
- case "60132":
|
|
|
- strategies.add(strategyMap.get(SimHotVideoRecallStrategy.class.getSimpleName()));
|
|
|
- strategies.add(strategyMap.get(ReturnVideoRecallStrategy.class.getSimpleName()));
|
|
|
- strategies.add(strategyMap.get(FestivalRecallStrategyV1.class.getSimpleName()));
|
|
|
- break;
|
|
|
- default:
|
|
|
- // todo 做兜底吗?
|
|
|
- break;
|
|
|
- }
|
|
|
+ switch (abCode) {
|
|
|
+ case "60096":
|
|
|
+ strategies.add(strategyMap.get(RegionHWithoutDupRecallStrategy.class.getSimpleName()));
|
|
|
+ strategies.add(strategyMap.get(SimHotVideoRecallStrategy.class.getSimpleName()));
|
|
|
+ strategies.add(strategyMap.get(ReturnVideoRecallStrategy.class.getSimpleName()));
|
|
|
+ break;
|
|
|
+ case "60111": // 561
|
|
|
+ case "60068":
|
|
|
+ case "60092":
|
|
|
+ case "60094":
|
|
|
+ case "60097": // 523
|
|
|
+ case "60098": // 533
|
|
|
+ case "60101": // 排序str实验
|
|
|
+ case "60102": // 通过更改param中的配置实现使用不同数据源 data66 rule68 + 无排序模块
|
|
|
+ case "60103": // 增加地域1小时扩量,通过配置实现
|
|
|
+ case "60120": // 576
|
|
|
+ strategies.add(strategyMap.get(SimHotVideoRecallStrategy.class.getSimpleName()));
|
|
|
+ strategies.add(strategyMap.get(ReturnVideoRecallStrategy.class.getSimpleName()));
|
|
|
+ break;
|
|
|
+ case "60112": // 562
|
|
|
+ strategies.add(strategyMap.get(SimHotVideoRecallStrategy.class.getSimpleName()));
|
|
|
+ strategies.add(strategyMap.get(ReturnVideoRecallStrategy.class.getSimpleName()));
|
|
|
+ strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV5Hand.class.getSimpleName()));
|
|
|
+ break;
|
|
|
+ case "60121": // 536
|
|
|
+ case "60122": // 537
|
|
|
+ case "60124": // 546
|
|
|
+ case "60125": // 547
|
|
|
+ case "60123": // 541
|
|
|
+ case "60126": // 548
|
|
|
+ case "60105": // 551
|
|
|
+ case "60106": // 552
|
|
|
+ case "60107": // 553
|
|
|
+ case "60116": // 566
|
|
|
+ case "60119": // 569
|
|
|
+ strategies.add(strategyMap.get(SimHotVideoRecallStrategy.class.getSimpleName()));
|
|
|
+ strategies.add(strategyMap.get(ReturnVideoRecallStrategy.class.getSimpleName()));
|
|
|
+ strategies.add(strategyMap.get(FestivalRecallStrategyV1.class.getSimpleName()));
|
|
|
+ break;
|
|
|
+ case "60113": // 563
|
|
|
+ case "60114": // 564
|
|
|
+ case "60115": // 565
|
|
|
+ case "60117": // 567
|
|
|
+ case "60118": // 568
|
|
|
+ case "60150": // 645
|
|
|
+ if (!hitUserBlacklist || !isInBlacklist) {
|
|
|
+ strategies.add(strategyMap.get(FlowPoolLastDayTopRecallStrategy.class.getSimpleName()));
|
|
|
+ }
|
|
|
+ strategies.add(strategyMap.get(SimHotVideoRecallStrategy.class.getSimpleName()));
|
|
|
+ strategies.add(strategyMap.get(ReturnVideoRecallStrategy.class.getSimpleName()));
|
|
|
+ strategies.add(strategyMap.get(FestivalRecallStrategyV1.class.getSimpleName()));
|
|
|
+ break;
|
|
|
+ case "60104": // 去掉sim的对比实验
|
|
|
+ strategies.add(strategyMap.get(ReturnVideoRecallStrategy.class.getSimpleName()));
|
|
|
+ break;
|
|
|
+ case "60110": // 新内容的召回(流量池的Top内容)
|
|
|
+ strategies.add(strategyMap.get(TopGoodPerformanceVideoRecallStrategy.class.getSimpleName()));
|
|
|
+ if (!hitUserBlacklist || !isInBlacklist) {
|
|
|
+ strategies.add(strategyMap.get(FlowPoolLastDayTopRecallStrategy.class.getSimpleName()));
|
|
|
+ }
|
|
|
+ strategies.add(strategyMap.get(SimHotVideoRecallStrategy.class.getSimpleName()));
|
|
|
+ strategies.add(strategyMap.get(ReturnVideoRecallStrategy.class.getSimpleName()));
|
|
|
+ break;
|
|
|
+ case "60130":
|
|
|
+ case "60131":
|
|
|
+ case "60132":
|
|
|
+ strategies.add(strategyMap.get(SimHotVideoRecallStrategy.class.getSimpleName()));
|
|
|
+ strategies.add(strategyMap.get(ReturnVideoRecallStrategy.class.getSimpleName()));
|
|
|
+ strategies.add(strategyMap.get(FestivalRecallStrategyV1.class.getSimpleName()));
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ strategies.add(strategyMap.get(SimHotVideoRecallStrategy.class.getSimpleName()));
|
|
|
+ strategies.add(strategyMap.get(ReturnVideoRecallStrategy.class.getSimpleName()));
|
|
|
+ strategies.add(strategyMap.get(FestivalRecallStrategyV1.class.getSimpleName()));
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
return strategies;
|