瀏覽代碼

Merge branch 'feature_refactor' of algorithm/recommend-server into master

dingyunpeng 3 月之前
父節點
當前提交
240b4ee797
共有 18 個文件被更改,包括 5 次插入431 次删除
  1. 0 27
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/common/base/Constant.java
  2. 0 15
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/common/base/RankItem.java
  3. 0 17
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/common/base/VideoActionFeature.java
  4. 0 2
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/model/RecommendParam.java
  5. 0 1
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/model/Video.java
  6. 1 31
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/RecommendService.java
  7. 2 1
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/AbstractFilterService.java
  8. 0 2
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/FlowPoolWithLevelFilterService.java
  9. 0 40
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/flowpool/FlowPoolConfigService.java
  10. 0 2
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/flowpool/FlowPoolService.java
  11. 0 1
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/RecallParam.java
  12. 2 8
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/RecallService.java
  13. 0 1
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/AbstractFlowPoolWithLevelRecallStrategy.java
  14. 0 71
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/AbstractFlowPoolWithLevelScoreRecallStrategy.java
  15. 0 1
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/FlowPoolWithLevelRecallStrategyTomson.java
  16. 0 178
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/FlowPoolWithLevelScoreRecallStrategy.java
  17. 0 3
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/QuickFlowPoolWithLevelRecallStrategy.java
  18. 0 30
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/QuickFlowPoolWithLevelScoreRecallStrategy.java

+ 0 - 27
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/common/base/Constant.java

@@ -1,27 +0,0 @@
-package com.tzld.piaoquan.recommend.server.common.base;
-
-/**
- * 常量
- *
- * @author supeng
- * @date 2020/08/19
- */
-public class Constant {
-    /**
-     * traceID
-     */
-    public static final String LOG_TRACE_ID = "logTraceId";
-    /**
-     * 流量池头部视频redis key
-     */
-    public static final String VIDEO_PERFORMANCE_DATA_REDIS_KEY = "video_performance_data_redis_key:";
-    /**
-     * 供给流量池实验 648 random
-     */
-    public static final String SUPPLY_AB_CODE = "60600";
-    /**
-     * 供给流量池实验 648 random
-     */
-    public static final String SUPPLY_AB_CODE_ID= "648";
-
-}

+ 0 - 15
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/common/base/RankItem.java

@@ -49,10 +49,6 @@ public class RankItem implements Comparable<RankItem> {
     private Map<String, Double> rankerScore = Maps.newHashMap();
     private Map<String, Integer> rankerIndex = Maps.newHashMap();
 
-    public RankItem() {
-
-    }
-
 
     public RankItem(Video video) {
         this.id = String.valueOf(video.getVideoId());
@@ -69,17 +65,6 @@ public class RankItem implements Comparable<RankItem> {
         this.score = 0.0;
     }
 
-    public RankItem(RankItem other) {
-        this.id = other.id;
-        this.videoId = other.videoId;
-        this.score = other.score;
-        this.scoreRos = other.scoreRos;
-        this.scoreStr = other.scoreStr;
-        this.video = other.video;
-
-    }
-
-
     @Override
     public int compareTo(RankItem o) {
         if (o == null) {

+ 0 - 17
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/common/base/VideoActionFeature.java

@@ -1,17 +0,0 @@
-package com.tzld.piaoquan.recommend.server.common.base;
-
-import lombok.Getter;
-import lombok.Data;
-import lombok.Getter;
-
-@Data
-public class VideoActionFeature {
-
-
-    private double view = 0d;
-    private double play = 0d;
-    private double realPlay = 0d;
-    private double share = 0d;
-    private double returns = 0d;
-
-}

+ 0 - 2
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/model/RecommendParam.java

@@ -22,8 +22,6 @@ public class RecommendParam {
     private String ruleKey;
     private String dataKey;
 
-    private int flowPoolId;
-    private String flowPoolAbtestGroup;
     private String rankKeyPrefix;
     private int appType;
     private Long videoId;

+ 0 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/model/Video.java

@@ -20,7 +20,6 @@ public class Video {
     // 流量池相关 start
     private String flowPool;
     private String level;
-    private String flowPoolAbtestGroup;
     private boolean inFlowPool;
     // 流量池相关 end
 

+ 1 - 31
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/RecommendService.java

@@ -53,16 +53,8 @@ public class RecommendService {
     @Qualifier("redisTemplate")
     private RedisTemplate<String, String> redisTemplate;
 
-    @ApolloJsonValue("${app_ab_code:{}}")
-    private Map<String, Map<String, Map<String, String>>> appAbCodeMap;
-
-    @ApolloJsonValue("${flow.pool.ids:[7, 8, 9, 10, 11, 12, 13, 14, 15, 16]}")
-    private List<Integer> flowPoolIds;
     @ApolloJsonValue("${city_code:[]}")
     private Set<String> cityCodes;
-
-    @Autowired
-    private FlowPoolConfigService flowPoolConfigService;
     @Autowired
     private RecallService recallService;
     @Autowired
@@ -221,7 +213,6 @@ public class RecommendService {
 
                 map.put("flowPool", String.valueOf(v.getFlowPool()));
                 map.put("level", String.valueOf(v.getLevel()));
-                map.put("flowPoolAbtestGroup", String.valueOf(v.getFlowPoolAbtestGroup()));
                 map.put("inFlowPool", String.valueOf(v.isInFlowPool()));
 
                 map.put("scoreRos", String.valueOf(v.getScoreRos()));
@@ -336,18 +327,6 @@ public class RecommendService {
             }
         }
 
-        // 流量池分发实验组划分
-        int flowPoolIdChoice = flowPoolIds.get(RandomUtils.nextInt(0, flowPoolIds.size()));
-        Map<String, List<Integer>> flowPoolConfig = flowPoolConfigService.getFlowPoolConfig();
-
-        param.setFlowPoolId(flowPoolIdChoice);
-        param.setFlowPoolAbtestGroup("control_group");
-        for (Map.Entry<String, List<Integer>> entry : flowPoolConfig.entrySet()) {
-            if (entry.getValue().contains(flowPoolIdChoice)) {
-                param.setFlowPoolAbtestGroup(entry.getKey());
-            }
-        }
-
         // 风险过滤
         if (riskVideoFilterSwitch) {
             boolean riskUser = riskScenes.contains(request.getHotSceneType())
@@ -416,7 +395,6 @@ public class RecommendService {
         recallParam.setDataKey(param.getDataKey());
 
         recallParam.setVideoId(param.getVideoId());
-        recallParam.setFlowPoolAbtestGroup(param.getFlowPoolAbtestGroup());
 
         String provinceCode = StringUtils.isNotBlank(param.getProvinceCode())
                 ? param.getProvinceCode()
@@ -495,15 +473,7 @@ public class RecommendService {
         if (CollectionUtils.isEmpty(flowPoolVideos)) {
             return;
         }
-
-        switch (param.getFlowPoolAbtestGroup()) {
-            case FlowPoolConstants.EXPERIMENTAL_FLOW_SET_LEVEL:
-                flowPoolService.updateDistributeCountWithLevel(flowPoolVideos);
-                break;
-            case FlowPoolConstants.EXPERIMENTAL_FLOW_SET_LEVEL_SCORE:
-                flowPoolService.updateDistributeCountWithLevelScore(flowPoolVideos);
-                break;
-        }
+        flowPoolService.updateDistributeCountWithLevel(flowPoolVideos);
     }
 
     private void updateLastVideoCache(List<Video> videos) {

+ 2 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/AbstractFilterService.java

@@ -41,7 +41,8 @@ public abstract class AbstractFilterService {
             cdl.await(1000, TimeUnit.MILLISECONDS);
         } catch (InterruptedException e) {
             log.error("filter error", e);
-            return null;
+            Thread.currentThread().interrupt();
+            return Collections.emptyList();
         }
 
         List<List<Long>> videoIds = new ArrayList<>();

+ 0 - 2
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/FlowPoolWithLevelFilterService.java

@@ -1,8 +1,6 @@
 package com.tzld.piaoquan.recommend.server.service.filter;
 
-import com.tzld.piaoquan.recommend.server.common.base.Constant;
 import com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolService;
-import com.tzld.piaoquan.recommend.server.util.JSONUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.MapUtils;

+ 0 - 40
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/flowpool/FlowPoolConfigService.java

@@ -32,27 +32,6 @@ public class FlowPoolConfigService {
     @Value("${flow.pool.upgrade.switch:true}")
     private boolean flowPoolUpgradeSwitch;
 
-    // TODO 这些配置可以用配置中心么?
-    // {"control_group": [], "experimental_flow_set_level": [10, 11, 12, 13, 14, 15, 16, 17], "experimental_flow_set_level_score": [9, 18]}
-    private LoadingCache<String, Map<String, List<Integer>>> flowPoolConfigCache = CacheBuilder.newBuilder()
-            .maximumSize(10)
-            .refreshAfterWrite(60, TimeUnit.SECONDS)
-            .expireAfterWrite(60, TimeUnit.SECONDS)
-            .expireAfterAccess(60, TimeUnit.SECONDS)
-            .build(new CacheLoader<String, Map<String, List<Integer>>>() {
-                @Override
-                public Map<String, List<Integer>> load(String key) throws Exception {
-                    String value = redisTemplate.opsForValue().get(key);
-                    if (StringUtils.isEmpty(value)) {
-                        value = "{\"control_group\": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16],\n" +
-                                "                           \"experimental_flow_set_level\": [],\n" +
-                                "                           \"experimental_flow_set_level_score\": []}";
-                    }
-                    return JSONUtils.fromJson(value, new TypeToken<Map<String, List<Integer>>>() {
-                    }, Collections.emptyMap());
-                }
-            });
-
     private LoadingCache<String, Map<String, Double>> levelWeightConfigCache = CacheBuilder.newBuilder()
             .maximumSize(10)
             .refreshAfterWrite(60, TimeUnit.SECONDS)
@@ -70,14 +49,6 @@ public class FlowPoolConfigService {
                 }
             });
 
-    public Map<String, List<Integer>> getFlowPoolConfig() {
-        try {
-            return flowPoolConfigCache.get("flow:pool:abtest:config");
-        } catch (ExecutionException e) {
-            log.error("getFlowPoolConfig error", e);
-            return Collections.emptyMap();
-        }
-    }
 
     public Map<String, Double> getLevelWeight4FlowPoolWithLevel() {
         try {
@@ -89,15 +60,4 @@ public class FlowPoolConfigService {
             return Collections.emptyMap();
         }
     }
-
-    public Map<String, Double> getLevelWeight4FlowPoolWithLevelScore() {
-        try {
-            return flowPoolUpgradeSwitch
-                    ? levelWeightConfigCache.get("flow:pool:level:score:weight:v2")
-                    : levelWeightConfigCache.get("flow:pool:level:recommend:weight");
-        } catch (ExecutionException e) {
-            log.error("getFlowPoolConfig error", e);
-            return Collections.emptyMap();
-        }
-    }
 }

+ 0 - 2
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/flowpool/FlowPoolService.java

@@ -80,13 +80,11 @@ public class FlowPoolService {
         if (flowPoolUpgradeSwitch) {
             asyncDelDistributeCountV2(videoFlowPoolMap, (appType, level, values) -> {
                 redisTemplate.opsForSet().remove(String.format(KEY_WITH_LEVEL_FORMAT_V2, appType, level), values);
-                redisTemplate.opsForSet().remove(KEY_QUICK_WITH_LEVEL_FORMAT_V2, values);
             });
         } else {
             asyncDelDistributeCount(videoFlowPoolMap, (appType, level, values) -> {
                 String key = String.format(KEY_WITH_LEVEL_FORMAT, appType, level);
                 Long count = redisTemplate.opsForSet().remove(key, values);
-                redisTemplate.opsForSet().remove(String.format(KEY_QUICK_WITH_LEVEL_FORMAT, appType), values);
             });
         }
 

+ 0 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/RecallParam.java

@@ -20,7 +20,6 @@ public class RecallParam {
     private String province;
 
     private int size;
-    private String flowPoolAbtestGroup;
     private Long videoId;
     private String uid;
     private boolean specialRecommend;

+ 2 - 8
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/RecallService.java

@@ -4,10 +4,7 @@ import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
 import com.tzld.piaoquan.recommend.server.common.ThreadPoolFactory;
 import com.tzld.piaoquan.recommend.server.common.enums.AppTypeEnum;
 import com.tzld.piaoquan.recommend.server.model.Video;
-import com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConstants;
 import com.tzld.piaoquan.recommend.server.service.recall.strategy.*;
-import com.tzld.piaoquan.recommend.server.util.CommonCollectionUtils;
-import com.tzld.piaoquan.recommend.server.util.JSONUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -121,11 +118,8 @@ public class RecallService implements ApplicationContextAware {
 
         // 命中用户黑名单不走流量池
         if (!param.isRiskUser()) {
-            if (param.getFlowPoolAbtestGroup().equals(FlowPoolConstants.EXPERIMENTAL_FLOW_SET_LEVEL)) {
-                strategies.add(strategyMap.get(FlowPoolWithLevelRecallStrategyTomson.class.getSimpleName()));
-            } else if (param.getFlowPoolAbtestGroup().equals(FlowPoolConstants.EXPERIMENTAL_FLOW_SET_LEVEL_SCORE)) {
-                strategies.add(strategyMap.get(FlowPoolWithLevelScoreRecallStrategy.class.getSimpleName()));
-            }
+            strategies.add(strategyMap.get(QuickFlowPoolWithLevelRecallStrategy.class.getSimpleName()));
+            strategies.add(strategyMap.get(FlowPoolWithLevelRecallStrategyTomson.class.getSimpleName()));
         }
         return strategies;
     }

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

@@ -56,7 +56,6 @@ public abstract class AbstractFlowPoolWithLevelRecallStrategy implements RecallS
                 recallData.setRovScore(RandomUtils.nextDouble(0, 100));
                 recallData.setPushFrom(pushFrom());
                 recallData.setFlowPool(videoFlowPoolMap.get(vid));
-                recallData.setFlowPoolAbtestGroup(param.getFlowPoolAbtestGroup());
                 recallData.setLevel(level);
                 results.add(recallData);
             });

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

@@ -1,71 +0,0 @@
-package com.tzld.piaoquan.recommend.server.service.recall.strategy;
-
-import com.tzld.piaoquan.recommend.server.model.Video;
-import com.tzld.piaoquan.recommend.server.service.filter.FilterResult;
-import com.tzld.piaoquan.recommend.server.service.filter.FlowPoolWithLevelScoreFilterService;
-import com.tzld.piaoquan.recommend.server.service.recall.FilterParamFactory;
-import com.tzld.piaoquan.recommend.server.service.recall.RecallParam;
-import com.tzld.piaoquan.recommend.server.service.recall.RecallStrategy;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.math.NumberUtils;
-import org.apache.commons.lang3.tuple.Pair;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.core.ZSetOperations;
-
-import java.util.*;
-
-/**
- * @author dyp
- */
-public abstract class AbstractFlowPoolWithLevelScoreRecallStrategy implements RecallStrategy {
-    @Autowired
-    @Qualifier("redisTemplate")
-    protected RedisTemplate<String, String> redisTemplate;
-
-    @Autowired
-    protected FlowPoolWithLevelScoreFilterService filterService;
-
-    @Override
-    public List<Video> recall(RecallParam param) {
-        Pair<String, String> flowPoolKeyAndLevel = flowPoolKeyAndLevel(param);
-        String flowPoolKey = flowPoolKeyAndLevel.getLeft();
-        String level = flowPoolKeyAndLevel.getRight();
-
-        int getSize = param.getSize() * 5;
-        List<Video> results = new ArrayList<>();
-        Set<ZSetOperations.TypedTuple<String>> data = redisTemplate.opsForZSet().reverseRangeWithScores(flowPoolKey, 0,
-                getSize - 1);
-        if (CollectionUtils.isEmpty(data)) {
-            return null;
-        }
-
-        Map<Long, Double> videoScoreMap = new HashMap<>();
-        Map<Long, String> videoFlowPoolMap = new LinkedHashMap<>();
-        for (ZSetOperations.TypedTuple<String> t : data) {
-            String[] values = t.getValue().split("-");
-            videoFlowPoolMap.put(NumberUtils.toLong(values[0], 0), values[1]);
-            videoScoreMap.put(NumberUtils.toLong(values[0], 0), t.getScore());
-        }
-        FilterResult filterResult = filterService.filter(FilterParamFactory.create(param, videoFlowPoolMap));
-
-        if (filterResult != null && CollectionUtils.isNotEmpty(filterResult.getVideoIds())) {
-            filterResult.getVideoIds().stream().forEach(vid -> {
-                Video video = new Video();
-                video.setVideoId(vid);
-                video.setRovScore(videoScoreMap.get(vid));
-                video.setPushFrom(pushFrom());
-                video.setFlowPool(videoFlowPoolMap.get(vid));
-                video.setFlowPoolAbtestGroup(param.getFlowPoolAbtestGroup());
-                video.setLevel(level);
-                results.add(video);
-            });
-        }
-
-        return results.subList(0, results.size() < param.getSize() ? results.size() : param.getSize());
-    }
-
-    abstract Pair<String, String> flowPoolKeyAndLevel(RecallParam param);
-
-}

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

@@ -169,7 +169,6 @@ public class FlowPoolWithLevelRecallStrategyTomson extends AbstractFlowPoolWithL
                 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);
             });

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

@@ -1,178 +0,0 @@
-package com.tzld.piaoquan.recommend.server.service.recall.strategy;
-
-import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
-import com.google.common.collect.Lists;
-import com.tzld.piaoquan.recommend.server.model.Video;
-import com.tzld.piaoquan.recommend.server.service.filter.FilterParam;
-import com.tzld.piaoquan.recommend.server.service.filter.FilterResult;
-import com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConfigService;
-import com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConstants;
-import com.tzld.piaoquan.recommend.server.service.recall.FilterParamFactory;
-import com.tzld.piaoquan.recommend.server.service.recall.RecallParam;
-import com.tzld.piaoquan.recommend.server.service.score.ScorerUtils;
-import com.tzld.piaoquan.recommend.server.service.score4recall.ScorerPipeline4Recall;
-import com.tzld.piaoquan.recommend.server.util.JSONUtils;
-import lombok.Data;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.RandomUtils;
-import org.apache.commons.lang3.math.NumberUtils;
-import org.apache.commons.lang3.tuple.Pair;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.ZSetOperations;
-import org.springframework.stereotype.Service;
-
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConstants.*;
-
-/**
- * @author dyp
- */
-@Service
-public class FlowPoolWithLevelScoreRecallStrategy extends AbstractFlowPoolWithLevelScoreRecallStrategy {
-    @ApolloJsonValue("${ifOneLevelRandom:true}")
-    private boolean ifOneLevelRandom;
-    @Autowired
-    private FlowPoolConfigService flowPoolConfigService;
-
-    @Override
-    Pair<String, String> flowPoolKeyAndLevel(RecallParam param) {
-        //# 1. 获取流量池各层级分发概率权重
-        Map<String, Double> levelWeightMap = flowPoolConfigService.getLevelWeight4FlowPoolWithLevelScore();
-
-        // 2. 判断各层级是否有视频需分发
-        List<LevelWeight> availableLevels = new ArrayList<>();
-        for (Map.Entry<String, Double> entry : levelWeightMap.entrySet()) {
-            String levelKey = param.isFlowPoolUpgrade()
-                    ? String.format(KEY_WITH_LEVEL_SCORE_FORMAT_V2, 0, entry.getKey())
-                    : String.format(KEY_WITH_LEVEL_SCORE_FORMAT, param.getAppType(), entry.getKey());
-            if (Boolean.TRUE.equals(redisTemplate.hasKey(levelKey))) {
-                LevelWeight lw = new LevelWeight();
-                lw.setLevel(entry.getKey());
-                lw.setLevelKey(levelKey);
-                lw.setWeight(entry.getValue());
-                availableLevels.add(lw);
-            }
-        }
-
-        //log.info("availableLevels {}", JSONUtils.toJson(availableLevels));
-        if (CollectionUtils.isEmpty(availableLevels)) {
-            return Pair.of("", "");
-        }
-
-        // 3. 根据可分发层级权重设置分发概率
-        Collections.sort(availableLevels, Comparator.comparingDouble(LevelWeight::getWeight));
-
-        double weightSum = availableLevels.stream().mapToDouble(o -> o.getWeight()).sum();
-        BigDecimal weightSumBD = new BigDecimal(weightSum);
-        double level_p_low = 0;
-        double weight_temp = 0;
-        double level_p_up = 0;
-        Map<String, LevelP> level_p_mapping = new HashMap<>();
-        for (LevelWeight lw : availableLevels) {
-            BigDecimal bd = new BigDecimal(weight_temp + lw.getWeight());
-            level_p_up = bd.divide(weightSumBD, 2, RoundingMode.HALF_UP).doubleValue();
-            LevelP levelP = new LevelP();
-            levelP.setMin(level_p_low);
-            levelP.setMax(level_p_up);
-            levelP.setLevelKey(lw.getLevelKey());
-            level_p_mapping.put(lw.level, levelP);
-            level_p_low = level_p_up;
-
-            weight_temp += lw.getWeight();
-        }
-
-        // 4. 随机生成[0,1)之间数,返回相应概率区间的key
-        double random_p = RandomUtils.nextDouble(0, 1);
-        for (Map.Entry<String, LevelP> entry : level_p_mapping.entrySet()) {
-            if (random_p >= entry.getValue().getMin()
-                    && random_p <= entry.getValue().getMax()) {
-                return Pair.of(entry.getValue().getLevelKey(), entry.getKey());
-            }
-        }
-        return Pair.of("", "");
-    }
-
-    @Data
-    static class LevelWeight {
-        private String level;
-        private String levelKey;
-        private Double weight;
-    }
-
-    @Data
-    static class LevelP {
-        private String levelKey;
-        private double min;
-        private double max;
-    }
-
-    @Override
-    public String pushFrom() {
-        return FlowPoolConstants.PUSH_FORM;
-    }
-
-    @Override
-    public List<Video> recall(RecallParam param) {
-        Pair<String, String> flowPoolKeyAndLevel = flowPoolKeyAndLevel(param);
-        String flowPoolKey = flowPoolKeyAndLevel.getLeft();
-        String level = flowPoolKeyAndLevel.getRight();
-        Set<ZSetOperations.TypedTuple<String>> data = redisTemplate.opsForZSet().reverseRangeWithScores(flowPoolKey, 0, 1000);
-        if (CollectionUtils.isEmpty(data)) {
-            return null;
-        }
-        Map<String, String> videoFlowPoolMap = new LinkedHashMap<>();
-        Map<Long, String> videoFlowPoolMap_ = new LinkedHashMap<>();
-        for (ZSetOperations.TypedTuple<String> value : data) {
-            String[] values = Objects.requireNonNull(value.getValue()).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()));
-        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.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;
-    }
-}

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

@@ -13,9 +13,6 @@ public class QuickFlowPoolWithLevelRecallStrategy extends AbstractFlowPoolWithLe
 
     @Override
     Pair<String, String> flowPoolKeyAndLevel(RecallParam param) {
-        if (param.isFlowPoolUpgrade()) {
-            return Pair.of(FlowPoolConstants.KEY_QUICK_WITH_LEVEL_FORMAT_V2, "-1");
-        }
         return Pair.of(String.format("flow:pool:quick:item:%s:3", param.getAppType()), "");
     }
 

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

@@ -1,30 +0,0 @@
-package com.tzld.piaoquan.recommend.server.service.recall.strategy;
-
-import com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConstants;
-import com.tzld.piaoquan.recommend.server.service.recall.RecallParam;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.tuple.Pair;
-import org.springframework.stereotype.Service;
-
-import static com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConstants.KEY_QUICK_WITH_LEVEL_SCORE_FORMAT;
-
-/**
- * @author dyp
- */
-@Service
-@Slf4j
-public class QuickFlowPoolWithLevelScoreRecallStrategy extends AbstractFlowPoolWithLevelScoreRecallStrategy {
-
-    @Override
-    Pair<String, String> flowPoolKeyAndLevel(RecallParam param) {
-        if (param.isFlowPoolUpgrade()) {
-            return Pair.of(FlowPoolConstants.KEY_QUICK_WITH_LEVEL_SCORE_FORMAT_V2, "-1");
-        }
-        return Pair.of(String.format(KEY_QUICK_WITH_LEVEL_SCORE_FORMAT, param.getAppType()), "");
-    }
-
-    @Override
-    public String pushFrom() {
-        return FlowPoolConstants.QUICK_PUSH_FORM;
-    }
-}