Ver Fonte

Merge branch 'wyp/0324-headFisson' of Server/long-article-recommend into master

wangyunpeng há 3 meses atrás
pai
commit
54c664fcd5

+ 2 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/dto/Content.java

@@ -47,6 +47,8 @@ public class Content {
     private Double t0FissionByFansSumAvg;
     private Double t0FissionByReadAvgSumAvg;
     private Double t0FissionDeWeightByReadAvgSumAvg;
+    private Double t0FissionHeadDeWeightByReadAvgSumAvg;
+    private Double t0FissionRecommendDeWeightByReadAvgSumAvg;
 
     private Map<String, Double> scoreMap;
     private double score;

+ 1 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/recommend/RecommendService.java

@@ -282,6 +282,7 @@ public class RecommendService {
         rankParam.setUserGroupIds(param.getUserGroupIds());
         rankParam.setType(param.getType());
         rankParam.setReplaceSimilarityAccount(param.getReplaceSimilarityAccount());
+        rankParam.setPlanId(param.getPlanId());
 
         return rankParam;
     }

+ 1 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/recommend/rank/RankParam.java

@@ -12,6 +12,7 @@ import java.util.List;
 public class RankParam {
     private String ghId;
     private String accountName;
+    private String planId;
     private List<Content> contents;
     private List<Content> backup;
     private int size;

+ 1 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/recommend/rank/RankStrategy.java

@@ -65,6 +65,7 @@ public interface RankStrategy {
         scoreParam.setStrategy(param.getStrategy());
         scoreParam.setScene(param.getScene());
         scoreParam.setReplaceSimilarityAccount(param.getReplaceSimilarityAccount());
+        scoreParam.setPlanId(param.getPlanId());
         return scoreParam;
     }
 

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

@@ -684,6 +684,8 @@ public class RecallService implements ApplicationContextAware {
         int firstLevelSize = 0;
         int fissionSum = 0;
         double fissionWeightSum = 0;
+        double fissionHeadWeightSum = 0;
+        double fissionRecommendWeightSum = 0;
         int fansSum = 0;
         int avgReadCountSum = 0;
         Double t0FissionByFansSum = 0.0;
@@ -714,11 +716,21 @@ public class RecallService implements ApplicationContextAware {
                 continue;
             }
             int sumFission0 = 0;
+            int sumFission0Head = 0;
+            int sumFission0Recommend = 0;
             Date minDate = article.getArticleDetailInfoList().stream().map(ArticleDetailInfo::getRecallDt)
                     .min(Date::compareTo).orElse(new Date());
             for (ArticleDetailInfo articleDetailInfo : article.getArticleDetailInfoList()) {
-                if (articleDetailInfo.getRecallDt().equals(minDate) && Objects.nonNull(articleDetailInfo.getFission0())) {
-                    sumFission0 += articleDetailInfo.getFission0();
+                if (articleDetailInfo.getRecallDt().equals(minDate)) {
+                    if (Objects.nonNull(articleDetailInfo.getFission0())) {
+                        sumFission0 += articleDetailInfo.getFission0();
+                    }
+                    if (Objects.nonNull(articleDetailInfo.getFission0Head())) {
+                        sumFission0Head += articleDetailInfo.getFission0Head();
+                    }
+                    if (Objects.nonNull(articleDetailInfo.getFission0Recommend())) {
+                        sumFission0Recommend += articleDetailInfo.getFission0Recommend();
+                    }
                 }
             }
             if (sumFission0 == 0) {
@@ -741,8 +753,12 @@ public class RecallService implements ApplicationContextAware {
             int hour = DateUtils.getHourByTimestamp(article.getPublishTimestamp());
             if (hour >= 12) {
                 fissionWeightSum += sumFission0 / morningNoonFissionRate;
+                fissionHeadWeightSum += sumFission0Head / morningNoonFissionRate;
+                fissionRecommendWeightSum += sumFission0Recommend / morningNoonFissionRate;
             } else {
                 fissionWeightSum += sumFission0;
+                fissionHeadWeightSum += sumFission0Head;
+                fissionRecommendWeightSum += sumFission0Recommend;
             }
             firstLevelSize++;
         }
@@ -758,6 +774,8 @@ public class RecallService implements ApplicationContextAware {
             }
             if (avgReadCountSum > 0) {
                 content.setT0FissionDeWeightByReadAvgSumAvg(fissionWeightSum / (avgReadCountSum + 500));
+                content.setT0FissionHeadDeWeightByReadAvgSumAvg(fissionHeadWeightSum / (avgReadCountSum + 500));
+                content.setT0FissionRecommendDeWeightByReadAvgSumAvg(fissionRecommendWeightSum / (avgReadCountSum + 500));
             }
         }
     }

+ 1 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/recommend/score/ScoreParam.java

@@ -18,6 +18,7 @@ import java.util.List;
 public class ScoreParam {
     private String ghId;
     private String accountName;
+    private String planId;
     private List<Content> contents;
     private String strategy;
     private String scene;

+ 15 - 2
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/recommend/score/strategy/HisFissionDeWeightAvgReadSumRateStrategy.java

@@ -1,5 +1,6 @@
 package com.tzld.longarticle.recommend.server.service.recommend.score.strategy;
 
+import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
 import com.tzld.longarticle.recommend.server.model.dto.Content;
 import com.tzld.longarticle.recommend.server.service.recommend.config.AccountIndexAvgViewCountService;
 import com.tzld.longarticle.recommend.server.service.recommend.score.Score;
@@ -12,6 +13,8 @@ import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 
 @Component
 @Slf4j
@@ -20,10 +23,13 @@ public class HisFissionDeWeightAvgReadSumRateStrategy implements ScoreStrategy {
     @Autowired
     AccountIndexAvgViewCountService accountIndexAvgViewCountService;
 
+    @ApolloJsonValue("${scoreFissionWeightConfig:{}}")
+    private Map<String, Map<String, Double>> scoreFissionWeightConfig;
+
     @Override
     public List<Score> score(ScoreParam param) {
-        long start = System.currentTimeMillis();
         List<Score> scores = new ArrayList<>();
+        Map<String, Double> scoreFissionWeightConfigMap = scoreFissionWeightConfig.get(param.getPlanId());
         for (Content content : param.getContents()) {
             if (CollectionUtils.isEmpty(content.getHisPublishArticleList())) {
                 continue;
@@ -31,7 +37,14 @@ public class HisFissionDeWeightAvgReadSumRateStrategy implements ScoreStrategy {
             Score score = new Score();
             score.setStrategy(this);
             score.setContentId(content.getId());
-            score.setScore(content.getT0FissionDeWeightByReadAvgSumAvg());
+            Double scoreValue = 0.0;
+            if (Objects.nonNull(scoreFissionWeightConfigMap)) {
+                scoreValue += content.getT0FissionHeadDeWeightByReadAvgSumAvg() * scoreFissionWeightConfigMap.get("head");
+                scoreValue += content.getT0FissionRecommendDeWeightByReadAvgSumAvg() * scoreFissionWeightConfigMap.get("recommend");
+            } else {
+                scoreValue = content.getT0FissionDeWeightByReadAvgSumAvg();
+            }
+            score.setScore(scoreValue);
             scores.add(score);
         }
         return scores;