丁云鹏 9 months ago
parent
commit
bc3b97bcfa

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

@@ -1,5 +1,6 @@
 package com.tzld.longarticle.recommend.server.model;
 
+import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
@@ -13,6 +14,7 @@ import java.util.List;
 @NoArgsConstructor
 @Getter
 @Setter
+@AllArgsConstructor
 public class Content {
     private String id;
     private String title;

+ 44 - 2
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/rank/RankService.java

@@ -5,12 +5,21 @@ import com.tzld.longarticle.recommend.server.model.Content;
 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.ScoreStrategy;
+import com.tzld.longarticle.recommend.server.service.score.strategy.ContentPoolStrategy;
+import com.tzld.longarticle.recommend.server.service.score.strategy.SimilarityStrategy;
 import com.tzld.longarticle.recommend.server.util.CommonCollectionUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+<<<<<<< HEAD
 import java.util.*;
+=======
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+>>>>>>> 432e804 (init)
 
 /**
  * @author dyp
@@ -25,10 +34,43 @@ public class RankService {
     public RankResult rank(RankParam param) {
 
         ScoreResult result = scoreService.score(convertToScoreParam(param));
+        Map<String, Map<Class<? extends ScoreStrategy>, Double>> scoreMap = result.getScoreMap();
+
+        Collections.sort(param.getContents(), (o1, o2) -> {
+            String o1Id = o1.getId();
+            String o2Id = o2.getId();
+
+            double o1SimilarityScore = scoreMap.get(o1Id) != null
+                    ? scoreMap.get(o1Id).get(SimilarityStrategy.class)
+                    : 0.0;
+            double o2SimilarityScore = scoreMap.get(o2Id) != null
+                    ? scoreMap.get(o2Id).get(SimilarityStrategy.class)
+                    : 0.0;
+            if (o1SimilarityScore < o2SimilarityScore) {
+                return -1;
+            }
+            if (o1SimilarityScore > o2SimilarityScore) {
+                return 1;
+            }
+
+            double o1ContentPoolScore = scoreMap.get(o1Id) != null
+                    ? scoreMap.get(o1Id).get(ContentPoolStrategy.class)
+                    : 0.0;
+            double o2ContentPoolScore = scoreMap.get(o2Id) != null
+                    ? scoreMap.get(o2Id).get(ContentPoolStrategy.class)
+                    : 0.0;
+            if (o1ContentPoolScore < o2ContentPoolScore) {
+                return -1;
+            }
+            if (o1ContentPoolScore > o2ContentPoolScore) {
+                return 1;
+            }
+            return 0;
+        });
 
 
-        Collections.sort(items, (o1, o2) -> Double.compare(o2.getScore(), o1.getScore()));
-        List<Content> contents = CommonCollectionUtils.toList(items, RankItem::getContent);
+        // 标题相似过滤
+        param.getContents();
 
         return new RankResult(contents);
     }

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

@@ -2,6 +2,7 @@ package com.tzld.longarticle.recommend.server.service.score;
 
 
 import com.tzld.longarticle.recommend.server.common.ThreadPoolFactory;
+import com.tzld.longarticle.recommend.server.service.score.strategy.ContentPoolStrategy;
 import com.tzld.longarticle.recommend.server.service.score.strategy.SimilarityStrategy;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeansException;
@@ -45,8 +46,7 @@ public class ScoreService implements ApplicationContextAware {
         List<Future<List<Score>>> futures = new ArrayList<>();
         for (final ScoreStrategy strategy : strategies) {
             Future<List<Score>> future = pool.submit(() -> {
-                List<Score> result = new ArrayList<>();
-                result.add(strategy.score(param);
+                List<Score> result = strategy.score(param);
                 cdl.countDown();
                 return result;
             });

+ 5 - 3
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/score/strategy/ContentPoolStrategy.java

@@ -1,11 +1,10 @@
 package com.tzld.longarticle.recommend.server.service.score.strategy;
 
-import com.tzld.longarticle.recommend.server.remote.NLPRemoteService;
+import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
 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 org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
@@ -17,13 +16,16 @@ import java.util.Map;
 @Component
 public class ContentPoolStrategy implements ScoreStrategy {
 
+    @ApolloJsonValue("${contentPoolScore:{}}")
+    private Map<String, Double> contentPoolScore;
+
     @Override
     public List<Score> score(ScoreParam param) {
 
         List<Score> scores = CommonCollectionUtils.toList(param.getContents(), c -> {
             Score score = new Score();
             score.setContentId(c.getId());
-            score.setScore();
+            score.setScore(contentPoolScore.getOrDefault(c.getContentPoolType(), 0.0));
             score.setStrategy(this.getClass());
             return score;
         });