Sfoglia il codice sorgente

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

dingyunpeng 3 mesi fa
parent
commit
23d4657b95
12 ha cambiato i file con 135 aggiunte e 364 eliminazioni
  1. 0 5
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/RecommendService.java
  2. 1 6
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/flowpool/FlowPoolConfigService.java
  3. 0 12
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/flowpool/FlowPoolConstants.java
  4. 3 50
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/flowpool/FlowPoolService.java
  5. 20 43
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV536.java
  6. 20 43
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV562.java
  7. 20 43
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV563.java
  8. 20 44
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV564.java
  9. 20 43
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV567.java
  10. 20 43
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV569.java
  11. 0 2
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/RecallParam.java
  12. 11 30
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/FlowPoolWithLevelRecallStrategyTomson.java

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

@@ -75,9 +75,6 @@ public class RecommendService {
     @ApolloJsonValue("${risk.scene:[]}")
     private Set<Long> riskScenes;
 
-    @Value("${flow.pool.upgrade.switch:true}")
-    private boolean flowPoolUpgradeSwitch;
-
     private LoadingCache<String, Set<String>> riskUserCache = CacheBuilder.newBuilder()
             .maximumSize(5)
             .refreshAfterWrite(300, TimeUnit.SECONDS)
@@ -418,8 +415,6 @@ public class RecommendService {
         recallParam.setHotSceneType(param.getHotSceneType());
         recallParam.setClientIp(param.getClientIp());
 
-        recallParam.setFlowPoolUpgrade(flowPoolUpgradeSwitch);
-
         return recallParam;
     }
 

+ 1 - 6
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/flowpool/FlowPoolConfigService.java

@@ -29,9 +29,6 @@ public class FlowPoolConfigService {
     @Qualifier("redisTemplate")
     private RedisTemplate<String, String> redisTemplate;
 
-    @Value("${flow.pool.upgrade.switch:true}")
-    private boolean flowPoolUpgradeSwitch;
-
     private LoadingCache<String, Map<String, Double>> levelWeightConfigCache = CacheBuilder.newBuilder()
             .maximumSize(10)
             .refreshAfterWrite(60, TimeUnit.SECONDS)
@@ -52,9 +49,7 @@ public class FlowPoolConfigService {
 
     public Map<String, Double> getLevelWeight4FlowPoolWithLevel() {
         try {
-            return flowPoolUpgradeSwitch
-                    ? levelWeightConfigCache.get("flow:pool:level:weight:v2")
-                    : levelWeightConfigCache.get("flow:pool:level:recommend:weight");
+            return levelWeightConfigCache.get("flow:pool:level:weight:v2");
         } catch (ExecutionException e) {
             log.error("getFlowPoolConfig error", e);
             return Collections.emptyMap();

+ 0 - 12
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/flowpool/FlowPoolConstants.java

@@ -4,22 +4,10 @@ package com.tzld.piaoquan.recommend.server.service.flowpool;
  * @author dyp
  */
 public class FlowPoolConstants {
-    public static final String EXPERIMENTAL_FLOW_SET_LEVEL = "experimental_flow_set_level";
-    public static final String EXPERIMENTAL_FLOW_SET_LEVEL_SCORE = "experimental_flow_set_level_score";
-
     public static final String PUSH_FORM = "flow_pool";
     public static final String QUICK_PUSH_FORM = "quick_flow_pool";
 
-    public static final String KEY_WITH_LEVEL_FORMAT = "flow:pool:level:item:%s:%s";
-    public static final String KEY_WITH_LEVEL_SUPPLY_FORMAT = "flow:pool:level:item:supply:%s:%s";
-    public static final String KEY_QUICK_WITH_LEVEL_FORMAT = "flow:pool:quick:item:%s:3";
-    public static final String KEY_WITH_LEVEL_SCORE_FORMAT = "flow:pool:level:item:score:%s:%s";
-    public static final String KEY_QUICK_WITH_LEVEL_SCORE_FORMAT = "flow:pool:quick:item:score:%s:3";
-
-
     public static final String KEY_WITH_LEVEL_FORMAT_V2 = "flow:pool:level:item:v2:%s:%s";
     public static final String KEY_QUICK_WITH_LEVEL_FORMAT_V2 = "flow:pool:quick:item:0:3";
-    public static final String KEY_WITH_LEVEL_SCORE_FORMAT_V2 = "flow:pool:level:item:score:v2:%s:%s";
-    public static final String KEY_QUICK_WITH_LEVEL_SCORE_FORMAT_V2 = "flow:pool:quick:item:score:0:3";
 
 }

+ 3 - 50
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/flowpool/FlowPoolService.java

@@ -6,10 +6,8 @@ import com.tzld.piaoquan.recommend.server.common.ThreadPoolFactory;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.MapUtils;
-import org.apache.commons.lang3.math.NumberUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 
@@ -17,7 +15,6 @@ import java.util.*;
 import java.util.concurrent.ExecutorService;
 import java.util.stream.Collectors;
 
-import static com.tzld.piaoquan.recommend.server.common.enums.AppTypeEnum.*;
 import static com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConstants.*;
 
 /**
@@ -38,13 +35,6 @@ public class FlowPoolService {
 
     private ExecutorService pool = ThreadPoolFactory.defaultPool();
 
-    @Value("${flow.pool.upgrade.switch:true}")
-    private boolean flowPoolUpgradeSwitch;
-
-    private int[] appTypes = {VLOG.getCode(), LOVE_MOVIE.getCode(), LOVE_LIVE.getCode(), LONG_VIDEO.getCode(),
-            SHORT_VIDEO.getCode(), H5.getCode(), APP_SPEED.getCode(), WAN_NENG_VIDEO.getCode(),
-            LAO_HAO_KAN_VIDEO.getCode(), ZUI_JING_QI.getCode(), PIAO_QUAN_VIDEO_PLUS.getCode(), JOURNEY.getCode()};
-
     public void updateDistributeCountWithLevel(List<Video> videos) {
         if (CollectionUtils.isEmpty(videos)) {
             return;
@@ -56,18 +46,9 @@ public class FlowPoolService {
     }
 
     private void asyncDelDistributeCountWithLevel(Map<Long, String> videoFlowPoolMap) {
-        if (flowPoolUpgradeSwitch) {
-            asyncDelDistributeCountV2(videoFlowPoolMap, (appType, level, values) -> {
-                redisTemplate.opsForSet().remove(String.format(KEY_WITH_LEVEL_FORMAT_V2, appType, level), values);
-            });
-        } else {
-            asyncDelDistributeCount(videoFlowPoolMap, (appType, level, values) -> {
-                String key = String.format(KEY_WITH_LEVEL_FORMAT, appType, level);
-                Long count = redisTemplate.opsForSet().remove(key, values);
-            });
-        }
-
-
+        asyncDelDistributeCountV2(videoFlowPoolMap, (appType, level, values) -> {
+            redisTemplate.opsForSet().remove(String.format(KEY_WITH_LEVEL_FORMAT_V2, appType, level), values);
+        });
     }
 
     private Map<Long, String> updateDistributeCount(List<Video> videos) {
@@ -83,34 +64,6 @@ public class FlowPoolService {
         return removeMap;
     }
 
-    private void asyncDelDistributeCount(Map<Long, String> videoFlowPoolMap,
-                                         TripleConsumer<Integer, String, String[]> flowPoolRemoveConsumer) {
-        if (MapUtils.isEmpty(videoFlowPoolMap)) {
-            return;
-        }
-        pool.execute(() -> {
-            List<String> keys = videoFlowPoolMap.entrySet().stream()
-                    .map(v -> String.format(localDistributeCountFormat, v.getKey(), v.getValue()))
-                    .collect(Collectors.toList());
-            redisTemplate.delete(keys);
-
-            Map<String, Double> levelWeight = flowPoolConfigService.getLevelWeight4FlowPoolWithLevel();
-            String[] values = new String[videoFlowPoolMap.size()];
-            int i = 0;
-            for (Map.Entry v : videoFlowPoolMap.entrySet()) {
-                values[i++] = String.format(valueFormat, v.getKey(), v.getValue());
-            }
-            // remove 每小程序每层的数据
-            // TODO 现在视频只会出现在一个层级,所以可以做个优化
-            for (String level : levelWeight.keySet()) {
-                for (int appType : appTypes) {
-                    flowPoolRemoveConsumer.accept(appType, level, values);
-                }
-            }
-        });
-    }
-
-
     private void asyncDelDistributeCountV2(Map<Long, String> videoFlowPoolMap,
                                            TripleConsumer<Integer, String, String[]> flowPoolRemoveConsumer) {
         if (MapUtils.isEmpty(videoFlowPoolMap)) {

+ 20 - 43
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV536.java

@@ -31,10 +31,6 @@ public class RankStrategy4RegionMergeModelV536 extends RankStrategy4RegionMergeM
     @Autowired
     private FeatureService featureService;
 
-
-    @Value("${similarity.concurrent: true}")
-    private boolean similarityConcurrent;
-
     @Override
     public List<Video> mergeAndRankRovRecall(RankParam param) {
         Map<String, Double> mergeWeight = this.mergeWeight != null ? this.mergeWeight : new HashMap<>(0);
@@ -223,54 +219,35 @@ public class RankStrategy4RegionMergeModelV536 extends RankStrategy4RegionMergeM
 
             String title = videoInfo.getOrDefault("title", "");
             if (!title.isEmpty()) {
-                if (similarityConcurrent) {
-                    List<Future<Pair<String, Double[]>>> futures = new ArrayList<>();
-                    for (String name : Arrays.asList("c3_feature", "c4_feature", "c5_feature", "c6_feature", "c7_feature")) {
-                        for (String key_time : Arrays.asList("tags_1d", "tags_3d", "tags_7d")) {
-                            String key = name + "_" + key_time;
-                            String tags = c34567Map.getOrDefault(key, "");
-                            if (!tags.isEmpty()) {
-                                Future<Pair<String, Double[]>> future = ThreadPoolFactory.defaultPool().submit(() -> {
-                                    Double[] doubles = null;
-                                    if (param.getAbExpCodes().contains(word2vecExp)) {
-                                        doubles = ExtractorUtils.funcC34567ForTagsNew(tags, title);
-                                    } else {
-                                        doubles = ExtractorUtils.funcC34567ForTags(tags, title);
-                                    }
-                                    return Pair.create(key, doubles);
-                                });
-                                futures.add(future);
-                            }
-                        }
-                    }
-                    try {
-                        for (Future<Pair<String, Double[]>> future : futures) {
-                            Pair<String, Double[]> pair = future.get(1000, TimeUnit.MILLISECONDS);
-                            featureMap.put(pair.getFirst() + "_matchnum", pair.getSecond()[0]);
-                            featureMap.put(pair.getFirst() + "_maxscore", pair.getSecond()[1]);
-                            featureMap.put(pair.getFirst() + "_avgscore", pair.getSecond()[2]);
-                        }
-                    } catch (Exception e) {
-                        log.error("concurrent similarity error", e);
-                    }
-                } else {
-                    for (String name : Arrays.asList("c3_feature", "c4_feature", "c5_feature", "c6_feature", "c7_feature")) {
-                        for (String key_time : Arrays.asList("tags_1d", "tags_3d", "tags_7d")) {
-                            String tags = c34567Map.getOrDefault(name + "_" + key_time, "");
-                            if (!tags.isEmpty()) {
+                List<Future<Pair<String, Double[]>>> futures = new ArrayList<>();
+                for (String name : Arrays.asList("c3_feature", "c4_feature", "c5_feature", "c6_feature", "c7_feature")) {
+                    for (String key_time : Arrays.asList("tags_1d", "tags_3d", "tags_7d")) {
+                        String key = name + "_" + key_time;
+                        String tags = c34567Map.getOrDefault(key, "");
+                        if (!tags.isEmpty()) {
+                            Future<Pair<String, Double[]>> future = ThreadPoolFactory.defaultPool().submit(() -> {
                                 Double[] doubles = null;
                                 if (param.getAbExpCodes().contains(word2vecExp)) {
                                     doubles = ExtractorUtils.funcC34567ForTagsNew(tags, title);
                                 } else {
                                     doubles = ExtractorUtils.funcC34567ForTags(tags, title);
                                 }
-                                featureMap.put(name + "_" + key_time + "_matchnum", doubles[0]);
-                                featureMap.put(name + "_" + key_time + "_maxscore", doubles[1]);
-                                featureMap.put(name + "_" + key_time + "_avgscore", doubles[2]);
-                            }
+                                return Pair.create(key, doubles);
+                            });
+                            futures.add(future);
                         }
                     }
                 }
+                try {
+                    for (Future<Pair<String, Double[]>> future : futures) {
+                        Pair<String, Double[]> pair = future.get(1000, TimeUnit.MILLISECONDS);
+                        featureMap.put(pair.getFirst() + "_matchnum", pair.getSecond()[0]);
+                        featureMap.put(pair.getFirst() + "_maxscore", pair.getSecond()[1]);
+                        featureMap.put(pair.getFirst() + "_avgscore", pair.getSecond()[2]);
+                    }
+                } catch (Exception e) {
+                    log.error("concurrent similarity error", e);
+                }
             }
 
             if (!vid.isEmpty()) {

+ 20 - 43
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV562.java

@@ -33,10 +33,6 @@ public class RankStrategy4RegionMergeModelV562 extends RankStrategy4RegionMergeM
     @Autowired
     private FeatureService featureService;
 
-
-    @Value("${similarity.concurrent: true}")
-    private boolean similarityConcurrent;
-
     private static final List<String> shortPeriod = Arrays.asList("1h", "2h", "4h", "6h", "12h", "24h", "7d");
     private static final List<String> middlePeriod = Arrays.asList("14d", "30d");
     private static final List<String> longPeriod = Arrays.asList("7d", "35d", "90d", "365d");
@@ -237,48 +233,29 @@ public class RankStrategy4RegionMergeModelV562 extends RankStrategy4RegionMergeM
 
             String title = videoInfo.getOrDefault("title", "");
             if (!title.isEmpty()) {
-                if (similarityConcurrent) {
-                    List<Future<Pair<String, Double[]>>> futures = new ArrayList<>();
-                    for (String name : Arrays.asList("c3_feature", "c4_feature", "c5_feature", "c6_feature", "c7_feature")) {
-                        for (String key_time : Arrays.asList("tags_1d", "tags_3d", "tags_7d")) {
-                            String key = name + "_" + key_time;
-                            String tags = c34567Map.getOrDefault(key, "");
-                            if (!tags.isEmpty()) {
-                                Future<Pair<String, Double[]>> future = ThreadPoolFactory.defaultPool().submit(() -> {
-                                    Double[] doubles = ExtractorUtils.funcC34567ForTagsNew(tags, title);
-                                    return Pair.create(key, doubles);
-                                });
-                                futures.add(future);
-                            }
-                        }
-                    }
-                    try {
-                        for (Future<Pair<String, Double[]>> future : futures) {
-                            Pair<String, Double[]> pair = future.get(1000, TimeUnit.MILLISECONDS);
-                            featureMap.put(pair.getFirst() + "_matchnum", pair.getSecond()[0]);
-                            featureMap.put(pair.getFirst() + "_maxscore", pair.getSecond()[1]);
-                            featureMap.put(pair.getFirst() + "_avgscore", pair.getSecond()[2]);
+                List<Future<Pair<String, Double[]>>> futures = new ArrayList<>();
+                for (String name : Arrays.asList("c3_feature", "c4_feature", "c5_feature", "c6_feature", "c7_feature")) {
+                    for (String key_time : Arrays.asList("tags_1d", "tags_3d", "tags_7d")) {
+                        String key = name + "_" + key_time;
+                        String tags = c34567Map.getOrDefault(key, "");
+                        if (!tags.isEmpty()) {
+                            Future<Pair<String, Double[]>> future = ThreadPoolFactory.defaultPool().submit(() -> {
+                                Double[] doubles = ExtractorUtils.funcC34567ForTagsNew(tags, title);
+                                return Pair.create(key, doubles);
+                            });
+                            futures.add(future);
                         }
-                    } catch (Exception e) {
-                        log.error("concurrent similarity error", e);
                     }
-                } else {
-                    for (String name : Arrays.asList("c3_feature", "c4_feature", "c5_feature", "c6_feature", "c7_feature")) {
-                        for (String key_time : Arrays.asList("tags_1d", "tags_3d", "tags_7d")) {
-                            String tags = c34567Map.getOrDefault(name + "_" + key_time, "");
-                            if (!tags.isEmpty()) {
-                                Double[] doubles = null;
-                                if (param.getAbExpCodes().contains(word2vecExp)) {
-                                    doubles = ExtractorUtils.funcC34567ForTagsNew(tags, title);
-                                } else {
-                                    doubles = ExtractorUtils.funcC34567ForTags(tags, title);
-                                }
-                                featureMap.put(name + "_" + key_time + "_matchnum", doubles[0]);
-                                featureMap.put(name + "_" + key_time + "_maxscore", doubles[1]);
-                                featureMap.put(name + "_" + key_time + "_avgscore", doubles[2]);
-                            }
-                        }
+                }
+                try {
+                    for (Future<Pair<String, Double[]>> future : futures) {
+                        Pair<String, Double[]> pair = future.get(1000, TimeUnit.MILLISECONDS);
+                        featureMap.put(pair.getFirst() + "_matchnum", pair.getSecond()[0]);
+                        featureMap.put(pair.getFirst() + "_maxscore", pair.getSecond()[1]);
+                        featureMap.put(pair.getFirst() + "_avgscore", pair.getSecond()[2]);
                     }
+                } catch (Exception e) {
+                    log.error("concurrent similarity error", e);
                 }
             }
 

+ 20 - 43
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV563.java

@@ -31,10 +31,6 @@ public class RankStrategy4RegionMergeModelV563 extends RankStrategy4RegionMergeM
     @Autowired
     private FeatureService featureService;
 
-
-    @Value("${similarity.concurrent: true}")
-    private boolean similarityConcurrent;
-
     @Override
     public List<Video> mergeAndRankRovRecall(RankParam param) {
         Map<String, Double> mergeWeight = this.mergeWeight != null ? this.mergeWeight : new HashMap<>(0);
@@ -235,54 +231,35 @@ public class RankStrategy4RegionMergeModelV563 extends RankStrategy4RegionMergeM
 
             String title = videoInfo.getOrDefault("title", "");
             if (!title.isEmpty()) {
-                if (similarityConcurrent) {
-                    List<Future<Pair<String, Double[]>>> futures = new ArrayList<>();
-                    for (String name : Arrays.asList("c3_feature", "c4_feature", "c5_feature", "c6_feature", "c7_feature")) {
-                        for (String key_time : Arrays.asList("tags_1d", "tags_3d", "tags_7d")) {
-                            String key = name + "_" + key_time;
-                            String tags = c34567Map.getOrDefault(key, "");
-                            if (!tags.isEmpty()) {
-                                Future<Pair<String, Double[]>> future = ThreadPoolFactory.defaultPool().submit(() -> {
-                                    Double[] doubles = null;
-                                    if (param.getAbExpCodes().contains(word2vecExp)) {
-                                        doubles = ExtractorUtils.funcC34567ForTagsNew(tags, title);
-                                    } else {
-                                        doubles = ExtractorUtils.funcC34567ForTags(tags, title);
-                                    }
-                                    return Pair.create(key, doubles);
-                                });
-                                futures.add(future);
-                            }
-                        }
-                    }
-                    try {
-                        for (Future<Pair<String, Double[]>> future : futures) {
-                            Pair<String, Double[]> pair = future.get(1000, TimeUnit.MILLISECONDS);
-                            featureMap.put(pair.getFirst() + "_matchnum", pair.getSecond()[0]);
-                            featureMap.put(pair.getFirst() + "_maxscore", pair.getSecond()[1]);
-                            featureMap.put(pair.getFirst() + "_avgscore", pair.getSecond()[2]);
-                        }
-                    } catch (Exception e) {
-                        log.error("concurrent similarity error", e);
-                    }
-                } else {
-                    for (String name : Arrays.asList("c3_feature", "c4_feature", "c5_feature", "c6_feature", "c7_feature")) {
-                        for (String key_time : Arrays.asList("tags_1d", "tags_3d", "tags_7d")) {
-                            String tags = c34567Map.getOrDefault(name + "_" + key_time, "");
-                            if (!tags.isEmpty()) {
+                List<Future<Pair<String, Double[]>>> futures = new ArrayList<>();
+                for (String name : Arrays.asList("c3_feature", "c4_feature", "c5_feature", "c6_feature", "c7_feature")) {
+                    for (String key_time : Arrays.asList("tags_1d", "tags_3d", "tags_7d")) {
+                        String key = name + "_" + key_time;
+                        String tags = c34567Map.getOrDefault(key, "");
+                        if (!tags.isEmpty()) {
+                            Future<Pair<String, Double[]>> future = ThreadPoolFactory.defaultPool().submit(() -> {
                                 Double[] doubles = null;
                                 if (param.getAbExpCodes().contains(word2vecExp)) {
                                     doubles = ExtractorUtils.funcC34567ForTagsNew(tags, title);
                                 } else {
                                     doubles = ExtractorUtils.funcC34567ForTags(tags, title);
                                 }
-                                featureMap.put(name + "_" + key_time + "_matchnum", doubles[0]);
-                                featureMap.put(name + "_" + key_time + "_maxscore", doubles[1]);
-                                featureMap.put(name + "_" + key_time + "_avgscore", doubles[2]);
-                            }
+                                return Pair.create(key, doubles);
+                            });
+                            futures.add(future);
                         }
                     }
                 }
+                try {
+                    for (Future<Pair<String, Double[]>> future : futures) {
+                        Pair<String, Double[]> pair = future.get(1000, TimeUnit.MILLISECONDS);
+                        featureMap.put(pair.getFirst() + "_matchnum", pair.getSecond()[0]);
+                        featureMap.put(pair.getFirst() + "_maxscore", pair.getSecond()[1]);
+                        featureMap.put(pair.getFirst() + "_avgscore", pair.getSecond()[2]);
+                    }
+                } catch (Exception e) {
+                    log.error("concurrent similarity error", e);
+                }
             }
 
             if (!vid.isEmpty()) {

+ 20 - 44
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV564.java

@@ -16,7 +16,6 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
 import org.apache.commons.math3.util.Pair;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
@@ -33,10 +32,6 @@ public class RankStrategy4RegionMergeModelV564 extends RankStrategy4RegionMergeM
     @Autowired
     private FeatureService featureService;
 
-
-    @Value("${similarity.concurrent: true}")
-    private boolean similarityConcurrent;
-
     private static final List<String> shortPeriod = Arrays.asList("1h", "2h", "4h", "6h", "12h", "24h", "7d");
     private static final List<String> middlePeriod = Arrays.asList("14d", "30d");
     private static final List<String> longPeriod = Arrays.asList("7d", "35d", "90d", "365d");
@@ -237,48 +232,29 @@ public class RankStrategy4RegionMergeModelV564 extends RankStrategy4RegionMergeM
 
             String title = videoInfo.getOrDefault("title", "");
             if (!title.isEmpty()) {
-                if (similarityConcurrent) {
-                    List<Future<Pair<String, Double[]>>> futures = new ArrayList<>();
-                    for (String name : Arrays.asList("c3_feature", "c4_feature", "c5_feature", "c6_feature", "c7_feature")) {
-                        for (String key_time : Arrays.asList("tags_1d", "tags_3d", "tags_7d")) {
-                            String key = name + "_" + key_time;
-                            String tags = c34567Map.getOrDefault(key, "");
-                            if (!tags.isEmpty()) {
-                                Future<Pair<String, Double[]>> future = ThreadPoolFactory.defaultPool().submit(() -> {
-                                    Double[] doubles = ExtractorUtils.funcC34567ForTagsNew(tags, title);
-                                    return Pair.create(key, doubles);
-                                });
-                                futures.add(future);
-                            }
-                        }
-                    }
-                    try {
-                        for (Future<Pair<String, Double[]>> future : futures) {
-                            Pair<String, Double[]> pair = future.get(1000, TimeUnit.MILLISECONDS);
-                            featureMap.put(pair.getFirst() + "_matchnum", pair.getSecond()[0]);
-                            featureMap.put(pair.getFirst() + "_maxscore", pair.getSecond()[1]);
-                            featureMap.put(pair.getFirst() + "_avgscore", pair.getSecond()[2]);
+                List<Future<Pair<String, Double[]>>> futures = new ArrayList<>();
+                for (String name : Arrays.asList("c3_feature", "c4_feature", "c5_feature", "c6_feature", "c7_feature")) {
+                    for (String key_time : Arrays.asList("tags_1d", "tags_3d", "tags_7d")) {
+                        String key = name + "_" + key_time;
+                        String tags = c34567Map.getOrDefault(key, "");
+                        if (!tags.isEmpty()) {
+                            Future<Pair<String, Double[]>> future = ThreadPoolFactory.defaultPool().submit(() -> {
+                                Double[] doubles = ExtractorUtils.funcC34567ForTagsNew(tags, title);
+                                return Pair.create(key, doubles);
+                            });
+                            futures.add(future);
                         }
-                    } catch (Exception e) {
-                        log.error("concurrent similarity error", e);
                     }
-                } else {
-                    for (String name : Arrays.asList("c3_feature", "c4_feature", "c5_feature", "c6_feature", "c7_feature")) {
-                        for (String key_time : Arrays.asList("tags_1d", "tags_3d", "tags_7d")) {
-                            String tags = c34567Map.getOrDefault(name + "_" + key_time, "");
-                            if (!tags.isEmpty()) {
-                                Double[] doubles = null;
-                                if (param.getAbExpCodes().contains(word2vecExp)) {
-                                    doubles = ExtractorUtils.funcC34567ForTagsNew(tags, title);
-                                } else {
-                                    doubles = ExtractorUtils.funcC34567ForTags(tags, title);
-                                }
-                                featureMap.put(name + "_" + key_time + "_matchnum", doubles[0]);
-                                featureMap.put(name + "_" + key_time + "_maxscore", doubles[1]);
-                                featureMap.put(name + "_" + key_time + "_avgscore", doubles[2]);
-                            }
-                        }
+                }
+                try {
+                    for (Future<Pair<String, Double[]>> future : futures) {
+                        Pair<String, Double[]> pair = future.get(1000, TimeUnit.MILLISECONDS);
+                        featureMap.put(pair.getFirst() + "_matchnum", pair.getSecond()[0]);
+                        featureMap.put(pair.getFirst() + "_maxscore", pair.getSecond()[1]);
+                        featureMap.put(pair.getFirst() + "_avgscore", pair.getSecond()[2]);
                     }
+                } catch (Exception e) {
+                    log.error("concurrent similarity error", e);
                 }
             }
 

+ 20 - 43
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV567.java

@@ -33,10 +33,6 @@ public class RankStrategy4RegionMergeModelV567 extends RankStrategy4RegionMergeM
     @Autowired
     private FeatureService featureService;
 
-
-    @Value("${similarity.concurrent: true}")
-    private boolean similarityConcurrent;
-
     private static final List<String> shortPeriod = Arrays.asList("1h", "2h", "4h", "6h", "12h", "24h", "7d");
     private static final List<String> middlePeriod = Arrays.asList("14d", "30d");
     private static final List<String> longPeriod = Arrays.asList("7d", "35d", "90d", "365d");
@@ -249,48 +245,29 @@ public class RankStrategy4RegionMergeModelV567 extends RankStrategy4RegionMergeM
 
             String title = videoInfo.getOrDefault("title", "");
             if (!title.isEmpty()) {
-                if (similarityConcurrent) {
-                    List<Future<Pair<String, Double[]>>> futures = new ArrayList<>();
-                    for (String name : Arrays.asList("c3_feature", "c4_feature", "c5_feature", "c6_feature", "c7_feature")) {
-                        for (String key_time : Arrays.asList("tags_1d", "tags_3d", "tags_7d")) {
-                            String key = name + "_" + key_time;
-                            String tags = c34567Map.getOrDefault(key, "");
-                            if (!tags.isEmpty()) {
-                                Future<Pair<String, Double[]>> future = ThreadPoolFactory.defaultPool().submit(() -> {
-                                    Double[] doubles = ExtractorUtils.funcC34567ForTagsNew(tags, title);
-                                    return Pair.create(key, doubles);
-                                });
-                                futures.add(future);
-                            }
-                        }
-                    }
-                    try {
-                        for (Future<Pair<String, Double[]>> future : futures) {
-                            Pair<String, Double[]> pair = future.get(1000, TimeUnit.MILLISECONDS);
-                            featureMap.put(pair.getFirst() + "_matchnum", pair.getSecond()[0]);
-                            featureMap.put(pair.getFirst() + "_maxscore", pair.getSecond()[1]);
-                            featureMap.put(pair.getFirst() + "_avgscore", pair.getSecond()[2]);
+                List<Future<Pair<String, Double[]>>> futures = new ArrayList<>();
+                for (String name : Arrays.asList("c3_feature", "c4_feature", "c5_feature", "c6_feature", "c7_feature")) {
+                    for (String key_time : Arrays.asList("tags_1d", "tags_3d", "tags_7d")) {
+                        String key = name + "_" + key_time;
+                        String tags = c34567Map.getOrDefault(key, "");
+                        if (!tags.isEmpty()) {
+                            Future<Pair<String, Double[]>> future = ThreadPoolFactory.defaultPool().submit(() -> {
+                                Double[] doubles = ExtractorUtils.funcC34567ForTagsNew(tags, title);
+                                return Pair.create(key, doubles);
+                            });
+                            futures.add(future);
                         }
-                    } catch (Exception e) {
-                        log.error("concurrent similarity error", e);
                     }
-                } else {
-                    for (String name : Arrays.asList("c3_feature", "c4_feature", "c5_feature", "c6_feature", "c7_feature")) {
-                        for (String key_time : Arrays.asList("tags_1d", "tags_3d", "tags_7d")) {
-                            String tags = c34567Map.getOrDefault(name + "_" + key_time, "");
-                            if (!tags.isEmpty()) {
-                                Double[] doubles = null;
-                                if (param.getAbExpCodes().contains(word2vecExp)) {
-                                    doubles = ExtractorUtils.funcC34567ForTagsNew(tags, title);
-                                } else {
-                                    doubles = ExtractorUtils.funcC34567ForTags(tags, title);
-                                }
-                                featureMap.put(name + "_" + key_time + "_matchnum", doubles[0]);
-                                featureMap.put(name + "_" + key_time + "_maxscore", doubles[1]);
-                                featureMap.put(name + "_" + key_time + "_avgscore", doubles[2]);
-                            }
-                        }
+                }
+                try {
+                    for (Future<Pair<String, Double[]>> future : futures) {
+                        Pair<String, Double[]> pair = future.get(1000, TimeUnit.MILLISECONDS);
+                        featureMap.put(pair.getFirst() + "_matchnum", pair.getSecond()[0]);
+                        featureMap.put(pair.getFirst() + "_maxscore", pair.getSecond()[1]);
+                        featureMap.put(pair.getFirst() + "_avgscore", pair.getSecond()[2]);
                     }
+                } catch (Exception e) {
+                    log.error("concurrent similarity error", e);
                 }
             }
 

+ 20 - 43
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankStrategy4RegionMergeModelV569.java

@@ -33,10 +33,6 @@ public class RankStrategy4RegionMergeModelV569 extends RankStrategy4RegionMergeM
     @Autowired
     private FeatureService featureService;
 
-
-    @Value("${similarity.concurrent: true}")
-    private boolean similarityConcurrent;
-
     private static final List<String> shortPeriod = Arrays.asList("1h", "2h", "4h", "6h", "12h", "24h", "7d");
     private static final List<String> middlePeriod = Arrays.asList("14d", "30d");
     private static final List<String> longPeriod = Arrays.asList("7d", "35d", "90d", "365d");
@@ -237,48 +233,29 @@ public class RankStrategy4RegionMergeModelV569 extends RankStrategy4RegionMergeM
 
             String title = videoInfo.getOrDefault("title", "");
             if (!title.isEmpty()) {
-                if (similarityConcurrent) {
-                    List<Future<Pair<String, Double[]>>> futures = new ArrayList<>();
-                    for (String name : Arrays.asList("c3_feature", "c4_feature", "c5_feature", "c6_feature", "c7_feature")) {
-                        for (String key_time : Arrays.asList("tags_1d", "tags_3d", "tags_7d")) {
-                            String key = name + "_" + key_time;
-                            String tags = c34567Map.getOrDefault(key, "");
-                            if (!tags.isEmpty()) {
-                                Future<Pair<String, Double[]>> future = ThreadPoolFactory.defaultPool().submit(() -> {
-                                    Double[] doubles = ExtractorUtils.funcC34567ForTagsNew(tags, title);
-                                    return Pair.create(key, doubles);
-                                });
-                                futures.add(future);
-                            }
-                        }
-                    }
-                    try {
-                        for (Future<Pair<String, Double[]>> future : futures) {
-                            Pair<String, Double[]> pair = future.get(1000, TimeUnit.MILLISECONDS);
-                            featureMap.put(pair.getFirst() + "_matchnum", pair.getSecond()[0]);
-                            featureMap.put(pair.getFirst() + "_maxscore", pair.getSecond()[1]);
-                            featureMap.put(pair.getFirst() + "_avgscore", pair.getSecond()[2]);
+                List<Future<Pair<String, Double[]>>> futures = new ArrayList<>();
+                for (String name : Arrays.asList("c3_feature", "c4_feature", "c5_feature", "c6_feature", "c7_feature")) {
+                    for (String key_time : Arrays.asList("tags_1d", "tags_3d", "tags_7d")) {
+                        String key = name + "_" + key_time;
+                        String tags = c34567Map.getOrDefault(key, "");
+                        if (!tags.isEmpty()) {
+                            Future<Pair<String, Double[]>> future = ThreadPoolFactory.defaultPool().submit(() -> {
+                                Double[] doubles = ExtractorUtils.funcC34567ForTagsNew(tags, title);
+                                return Pair.create(key, doubles);
+                            });
+                            futures.add(future);
                         }
-                    } catch (Exception e) {
-                        log.error("concurrent similarity error", e);
                     }
-                } else {
-                    for (String name : Arrays.asList("c3_feature", "c4_feature", "c5_feature", "c6_feature", "c7_feature")) {
-                        for (String key_time : Arrays.asList("tags_1d", "tags_3d", "tags_7d")) {
-                            String tags = c34567Map.getOrDefault(name + "_" + key_time, "");
-                            if (!tags.isEmpty()) {
-                                Double[] doubles = null;
-                                if (param.getAbExpCodes().contains(word2vecExp)) {
-                                    doubles = ExtractorUtils.funcC34567ForTagsNew(tags, title);
-                                } else {
-                                    doubles = ExtractorUtils.funcC34567ForTags(tags, title);
-                                }
-                                featureMap.put(name + "_" + key_time + "_matchnum", doubles[0]);
-                                featureMap.put(name + "_" + key_time + "_maxscore", doubles[1]);
-                                featureMap.put(name + "_" + key_time + "_avgscore", doubles[2]);
-                            }
-                        }
+                }
+                try {
+                    for (Future<Pair<String, Double[]>> future : futures) {
+                        Pair<String, Double[]> pair = future.get(1000, TimeUnit.MILLISECONDS);
+                        featureMap.put(pair.getFirst() + "_matchnum", pair.getSecond()[0]);
+                        featureMap.put(pair.getFirst() + "_maxscore", pair.getSecond()[1]);
+                        featureMap.put(pair.getFirst() + "_avgscore", pair.getSecond()[2]);
                     }
+                } catch (Exception e) {
+                    log.error("concurrent similarity error", e);
                 }
             }
 

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

@@ -32,6 +32,4 @@ public class RecallParam {
 
     private boolean riskUser;
 
-    private boolean flowPoolUpgrade;
-
 }

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

@@ -1,7 +1,5 @@
 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;
@@ -11,7 +9,6 @@ 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;
@@ -26,7 +23,6 @@ import java.math.RoundingMode;
 import java.util.*;
 import java.util.stream.Collectors;
 
-import static com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConstants.KEY_WITH_LEVEL_FORMAT;
 import static com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConstants.KEY_WITH_LEVEL_FORMAT_V2;
 
 /**
@@ -35,8 +31,6 @@ import static com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConsta
 @Service
 @Slf4j
 public class FlowPoolWithLevelRecallStrategyTomson extends AbstractFlowPoolWithLevelRecallStrategy {
-    @ApolloJsonValue("${ifOneLevelRandom:true}")
-    private boolean ifOneLevelRandom;
     @Autowired
     private FlowPoolConfigService flowPoolConfigService;
 
@@ -48,9 +42,7 @@ public class FlowPoolWithLevelRecallStrategyTomson extends AbstractFlowPoolWithL
         // 2. 判断各层级是否有视频需分发
         List<LevelWeight> availableLevels = new ArrayList<>();
         for (Map.Entry<String, Double> entry : levelWeightMap.entrySet()) {
-            String levelKey = param.isFlowPoolUpgrade()
-                    ? String.format(KEY_WITH_LEVEL_FORMAT_V2, 0, entry.getKey())
-                    : String.format(KEY_WITH_LEVEL_FORMAT, param.getAppType(), entry.getKey());
+            String levelKey = String.format(KEY_WITH_LEVEL_FORMAT_V2, 0, entry.getKey());
             if (redisTemplate.hasKey(levelKey)) {
                 LevelWeight lw = new LevelWeight();
                 lw.setLevel(entry.getKey());
@@ -135,27 +127,16 @@ public class FlowPoolWithLevelRecallStrategyTomson extends AbstractFlowPoolWithL
             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来保持插入顺序(如果需要的话)
-                    ));
-        }
+        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()));