浏览代码

cold start

丁云鹏 11 月之前
父节点
当前提交
9b3f94eac5

+ 1 - 3
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/repository/ArticlePreDistributeAccountRepository.java

@@ -1,7 +1,6 @@
 package com.tzld.longarticle.recommend.server.repository;
 
 import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
 import java.util.Optional;
@@ -10,6 +9,5 @@ import java.util.Optional;
 public interface ArticlePreDistributeAccountRepository extends JpaRepository<ArticlePreDistributeAccount,
         ArticlePreDistributeAccount.PK> {
 
-    @Query("SELECT t FROM ArticlePreDistributeAccount t WHERE t.ghId = :ghId ORDER BY t.date DESC")
-    Optional<ArticlePreDistributeAccount> findTopByGhId(String ghId);
+    ArticlePreDistributeAccount findFirstByGhIdOrderByDateDesc(String ghId);
 }

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

@@ -1,10 +1,14 @@
 package com.tzld.longarticle.recommend.server.service;
 
+import com.ctrip.framework.apollo.model.ConfigChangeEvent;
+import com.ctrip.framework.apollo.spring.annotation.ApolloConfigChangeListener;
 import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
 import com.google.common.collect.BiMap;
+import com.google.common.collect.HashBiMap;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
+import javax.annotation.PostConstruct;
 import java.util.Map;
 
 /**
@@ -17,9 +21,21 @@ public class AccountContentPoolConfigService {
     @ApolloJsonValue("${accountContentPoolConfig:{}}")
     private Map<String, String[]> accountContentPoolMap;
 
-    @ApolloJsonValue("${contentPoolLevelConfig:{}}")
     private BiMap<String, Integer> contentPoolLevelMap;
 
+    @ApolloJsonValue("${contentPoolLevelConfig:}")
+    private Map<String, Integer> contentPoolLevelConfig;
+
+    @PostConstruct
+    public void init() {
+        contentPoolLevelMap = HashBiMap.create(contentPoolLevelConfig);
+    }
+
+
+    @ApolloConfigChangeListener(interestedKeys = {"contentPoolLevelConfig"})
+    public void configChange(ConfigChangeEvent changeEvent) {
+        init();
+    }
 
     public String[] getContentPools(String accountName) {
         if (accountContentPoolMap.containsKey(accountName)) {
@@ -29,6 +45,7 @@ public class AccountContentPoolConfigService {
     }
 
     public String getContentPoolByLevel(int level) {
+
         return contentPoolLevelMap.inverse().getOrDefault(level, "");
     }
 

+ 10 - 6
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/filter/strategy/AccountPreDistributeStrategy.java

@@ -36,13 +36,17 @@ public class AccountPreDistributeStrategy implements FilterStrategy {
         Set<String> articles = new HashSet<>();
         String[] pools = accountContentPoolConfigService.getContentPools(param.getAccountName());
         if (pools.length >= 3) {
-            Optional<ArticlePreDistributeAccount> optional = articlePreDistributeAccountRepository.findTopByGhId(param.getGhId());
-            if (optional.isPresent() && StringUtils.isNotEmpty(optional.get().getArticleList())) {
-                List<String[]> list = JSONUtils.fromJson(optional.get().getArticleList(), new TypeToken<List<String[]>>() {
-                }, Collections.emptyList());
-                for (String[] s : list) {
-                    articles.add(s[0]);
+            try {
+                ArticlePreDistributeAccount optional = articlePreDistributeAccountRepository.findFirstByGhIdOrderByDateDesc(param.getGhId());
+                if (optional != null && StringUtils.isNotEmpty(optional.getArticleList())) {
+                    List<String[]> list = JSONUtils.fromJson(optional.getArticleList(), new TypeToken<List<String[]>>() {
+                    }, Collections.emptyList());
+                    for (String[] s : list) {
+                        articles.add(s[0]);
+                    }
                 }
+            } catch (Exception e) {
+                e.printStackTrace();
             }
         }
 

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

@@ -144,6 +144,7 @@ public class RankV3Strategy implements RankStrategy {
         ScoreParam scoreParam = new ScoreParam();
         scoreParam.setAccountName(param.getAccountName());
         scoreParam.setContents(param.getContents());
+        scoreParam.setStrategy(param.getStrategy());
         return scoreParam;
     }
 

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

@@ -18,4 +18,5 @@ import java.util.List;
 public class ScoreParam {
     private String accountName;
     private List<Content> contents;
+    private String strategy;
 }

+ 52 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/score/strategy/ViewMultiplierStrategy.java

@@ -0,0 +1,52 @@
+package com.tzld.longarticle.recommend.server.service.score.strategy;
+
+import com.tzld.longarticle.recommend.server.remote.NLPRemoteService;
+import com.tzld.longarticle.recommend.server.service.score.Score;
+import com.tzld.longarticle.recommend.server.service.score.ScoreParam;
+import com.tzld.longarticle.recommend.server.service.score.ScoreStrategy;
+import com.tzld.longarticle.recommend.server.util.CommonCollectionUtils;
+import com.tzld.longarticle.recommend.server.util.NormalizationUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author dyp
+ */
+@Component
+public class ViewMultiplierStrategy implements ScoreStrategy {
+
+    @Autowired
+    private NLPRemoteService nlpRemoteService;
+
+    @Override
+    public List<Score> score(ScoreParam param) {
+
+        if (CollectionUtils.isEmpty(param.getContents())) {
+            return Collections.emptyList();
+        }
+        Map<String, Double> scoreMap = nlpRemoteService.score(param.getAccountName(), param.getContents());
+
+        double min = scoreMap.values().stream()
+                .min(Double::compareTo)
+                .orElse(0.0);
+        double max = scoreMap.values().stream()
+                .max(Double::compareTo)
+                .orElse(0.0);
+
+        List<Score> scores = CommonCollectionUtils.toList(param.getContents(), c -> {
+            Score score = new Score();
+            score.setContentId(c.getId());
+            double val = scoreMap.get(c.getId()) == null ? 0.0 : scoreMap.get(c.getId());
+            score.setScore(NormalizationUtils.minMax(val, min, max));
+            score.setStrategy(this);
+            return score;
+        });
+        return scores;
+    }
+
+}