Explorar el Código

RankV3Strategy 同步 RankV5Strategy 头条内容不足返回空

wangyunpeng hace 7 meses
padre
commit
dac4923a21

+ 31 - 61
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/rank/strategy/RankV3Strategy.java

@@ -8,16 +8,16 @@ import com.tzld.longarticle.recommend.server.service.rank.RankItem;
 import com.tzld.longarticle.recommend.server.service.rank.RankParam;
 import com.tzld.longarticle.recommend.server.service.rank.RankResult;
 import com.tzld.longarticle.recommend.server.service.rank.RankStrategy;
+import com.tzld.longarticle.recommend.server.service.score.AccountIndexReplacePoolConfig;
 import com.tzld.longarticle.recommend.server.service.score.ScoreParam;
 import com.tzld.longarticle.recommend.server.service.score.ScoreResult;
 import com.tzld.longarticle.recommend.server.service.score.ScoreService;
 import com.tzld.longarticle.recommend.server.service.score.strategy.*;
 import com.tzld.longarticle.recommend.server.util.CommonCollectionUtils;
-import com.tzld.longarticle.recommend.server.util.JSONUtils;
 import com.tzld.longarticle.recommend.server.util.TitleSimilarCheckUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.RandomUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -39,30 +39,30 @@ public class RankV3Strategy implements RankStrategy {
 
         //log.info("RankParam {}", JSONUtils.toJson(param));
         ScoreResult scoreResult = scoreService.score(convertToScoreParam(param));
-        //log.info("ScoreResult {}", JSONUtils.toJson(scoreResult));
 
         Map<String, Map<String, Double>> scoreMap = scoreResult.getScoreMap();
+        String[] contentPools = accountContentPoolConfigService.getContentPools(param.getAccountName());
+        Map<Integer, AccountIndexReplacePoolConfig> indexReplacePoolConfigMap = accountContentPoolConfigService.getContentReplacePools(param.getAccountName());
 
         List<RankItem> items = CommonCollectionUtils.toList(param.getContents(), c -> {
             RankItem item = new RankItem();
             item.setContent(c);
             c.setScoreMap(scoreMap.get(c.getId()));
             item.setScoreMap(scoreMap.get(c.getId()));
-            String[] contentPools = accountContentPoolConfigService.getContentPools(param.getAccountName());
             double score;
-            if (contentPools[0].equals(item.getContent().getContentPoolType())) {
+            if (contentPools[0].equals(item.getContent().getContentPoolType())
+                    || contentPools[1].equals(item.getContent().getContentPoolType())) {
                 score = item.getScore(SimilarityStrategy.class.getSimpleName())
-                        + item.getScore(CategoryStrategy.class.getSimpleName())
-                        + item.getScore(ViewCountRateStrategy.class.getSimpleName())
-                        + item.getScore(FlowCtlDecreaseStrategy.class.getSimpleName());
-            } else if (contentPools[1].equals(item.getContent().getContentPoolType())) {
-                score = item.getScore(ViewCountStrategy.class.getSimpleName())
                         + item.getScore(CategoryStrategy.class.getSimpleName())
                         + item.getScore(FlowCtlDecreaseStrategy.class.getSimpleName());
+                if (item.getScore(PublishTimesStrategy.class.getSimpleName()) >= 0) {
+                    score += item.getScore(ViewCountRateStrategy.class.getSimpleName());
+                }
             } else {
                 score = item.getScore(SimilarityStrategy.class.getSimpleName())
                         + item.getScore(CategoryStrategy.class.getSimpleName())
                         + item.getScore(AccountPreDistributeStrategy.class.getSimpleName())
+                        + item.getScore(PublishTimesStrategy.class.getSimpleName())
                         + item.getScore(FlowCtlDecreaseStrategy.class.getSimpleName());
             }
             c.setScore(score);
@@ -72,11 +72,9 @@ public class RankV3Strategy implements RankStrategy {
 
         // 1 排序
         Collections.sort(items, (o1, o2) -> -Double.compare(o1.getScore(), o2.getScore()));
-        log.info("SortResult {}", JSONUtils.toJson(items));
         // 2 相似去重
         List<Content> contents = CommonCollectionUtils.toList(items, RankItem::getContent);
 //        contents = deduplication(contents);
-        log.info("Deduplication {}", JSONUtils.toJson(contents));
 
         // 3 文章按照内容池分组
         Map<String, List<Content>> contentMap = new HashMap<>();
@@ -84,66 +82,37 @@ public class RankV3Strategy implements RankStrategy {
             List<Content> data = contentMap.computeIfAbsent(c.getContentPoolType(), k -> new ArrayList<>());
             data.add(c);
         }
-        log.info("ContentMap {}", JSONUtils.toJson(contentMap));
         // 4 选文章
         List<Content> result = new ArrayList<>();
-        String[] contentPools = accountContentPoolConfigService.getContentPools(param.getAccountName());
         String[] publishPool = Arrays.copyOf(contentPools, contentPools.length);
 
-        // 头、次
-        if (StringUtils.equals(contentPools[0], contentPools[1])) {
-            List<Content> pool = contentMap.get(contentPools[0]);
-            Integer level = accountContentPoolConfigService.getLevelByContentPool(contentPools[0]);
-            if (level == 1) {
-                if (CollectionUtils.isNotEmpty(pool)) {
-                    result.add(pool.get(0));
-                    if (pool.size() > 2) {
-                        result.add(pool.get(2));
-                    }
-                } else {
-                    // level2 兜底
-                    pool = contentMap.get(accountContentPoolConfigService.getContentPoolByLevel(2));
-                    if (CollectionUtils.isNotEmpty(pool)) {
-                        result.add(pool.get(0));
-                        if (pool.size() > 1) {
-                            result.add(pool.get(1));
-                        }
-                    }
-                }
-            } else if (level == 2) {
-                if (CollectionUtils.isNotEmpty(pool)) {
-                    result.add(pool.get(0));
-                    if (pool.size() > 1) {
-                        result.add(pool.get(1));
-                    }
-                } else {
-                    pool = contentMap.get(ContentPoolEnum.autoArticlePoolLevel1.getContentPool());
-                    if (CollectionUtils.isNotEmpty(pool)) {
-                        result.add(pool.get(0));
-                    }
-                }
-            }
+        // 头
+        List<Content> pool1 = contentMap.get(contentPools[0]);
+        if (CollectionUtils.isNotEmpty(pool1)) {
+            result.add(pool1.get(0));
         } else {
-            // 配置错误 兜底
-            List<Content> pool1 = contentMap.get(contentPools[0]);
-            List<Content> pool2 = contentMap.get(contentPools[1]);
-            if (CollectionUtils.isNotEmpty(pool1)) {
-                result.add(pool1.get(0));
-                if (CollectionUtils.isNotEmpty(pool2)) {
-                    result.add(pool2.get(0));
-                }
-            } else if (CollectionUtils.isNotEmpty(pool2)) {
-                result.add(pool2.get(0));
-                publishPool[0] = contentPools[1];
-                if (pool2.size() > 1) {
-                    result.add(pool2.get(1));
+            return new RankResult(result);
+        }
+        // 次
+        List<Content> pool2 = contentMap.get(contentPools[1]);
+        if (CollectionUtils.isNotEmpty(pool2)) {
+            int i = RandomUtils.nextInt(0, Math.min(pool2.size(), 5));
+            result.add(pool2.get(i));
+        } else {
+            // 替补 根据设置替补内容池查找内容尽心替补
+            AccountIndexReplacePoolConfig replacePoolConfig = indexReplacePoolConfigMap.get(2);
+            if (Objects.nonNull(replacePoolConfig)) {
+                List<Content> pool2Replace = contentMap.get(replacePoolConfig.getContentPool());
+                if (CollectionUtils.isNotEmpty(pool2Replace)) {
+                    publishPool[1] = replacePoolConfig.getContentPool();
+                    result.add(pool2Replace.get(0));
                 }
             }
         }
 
         // 3-8
         List<Content> pool = contentMap.get(contentPools[2]);
-        if (CollectionUtils.isNotEmpty(pool)) {
+        if (CollectionUtils.isNotEmpty(pool) && param.getSize() > result.size()) {
             result.addAll(pool.subList(0, Math.min(pool.size(), param.getSize() - result.size())));
         }
 
@@ -158,6 +127,7 @@ public class RankV3Strategy implements RankStrategy {
         scoreParam.setAccountName(param.getAccountName());
         scoreParam.setContents(param.getContents());
         scoreParam.setStrategy(param.getStrategy());
+        scoreParam.setScene(param.getScene());
         return scoreParam;
     }
 

+ 3 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/recall/RecallService.java

@@ -125,6 +125,9 @@ public class RecallService implements ApplicationContextAware {
 
     private List<Content> getAllContent(RecallParam param) {
         List<Content> content = aigcRemoteService.getAllContent(param);
+        if (CollectionUtils.isEmpty(content)) {
+            return content;
+        }
         // 标题历史均值
         setTitleAvgViewCount(content);
         // category 查询

+ 2 - 8
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/score/ScoreService.java

@@ -86,14 +86,8 @@ public class ScoreService implements ApplicationContextAware {
         List<ScoreStrategy> strategies = new ArrayList<>();
         strategies.add(strategyMap.get(SimilarityStrategy.class.getSimpleName()));
         strategies.add(strategyMap.get(ViewCountStrategy.class.getSimpleName()));
-        if (StringUtils.equals(param.getStrategy(), RankStrategyEnum.ArticleRankV3.getStrategy())) {
-            strategies.add(strategyMap.get(ViewMultiplierStrategy.class.getSimpleName()));
-            strategies.add(strategyMap.get(CategoryStrategy.class.getSimpleName()));
-            strategies.add(strategyMap.get(AccountPreDistributeStrategy.class.getSimpleName()));
-            strategies.add(strategyMap.get(FlowCtlDecreaseStrategy.class.getSimpleName()));
-            strategies.add(strategyMap.get(ViewCountRateStrategy.class.getSimpleName()));
-        }
-        if (StringUtils.equals(param.getStrategy(), RankStrategyEnum.ArticleRankV4.getStrategy())
+        if (StringUtils.equals(param.getStrategy(), RankStrategyEnum.ArticleRankV3.getStrategy())
+                || StringUtils.equals(param.getStrategy(), RankStrategyEnum.ArticleRankV4.getStrategy())
                 || StringUtils.equals(param.getStrategy(), RankStrategyEnum.ArticleRankV5.getStrategy())
                 || StringUtils.equals(param.getStrategy(), RankStrategyEnum.ArticleRankV7.getStrategy())
                 || StringUtils.equals(param.getStrategy(), RankStrategyEnum.ArticleRankV8.getStrategy())