Browse Source

feat:添加获取首页tab的接口

zhaohaipeng 2 tuần trước cách đây
mục cha
commit
ebda3b213c

+ 8 - 5
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/strategy/RankSequenceStrategy.java

@@ -7,10 +7,7 @@ import com.tzld.piaoquan.recommend.server.model.Video;
 import com.tzld.piaoquan.recommend.server.service.rank.RankParam;
 import com.tzld.piaoquan.recommend.server.service.rank.RankParam;
 import com.tzld.piaoquan.recommend.server.service.rank.RankResult;
 import com.tzld.piaoquan.recommend.server.service.rank.RankResult;
 import com.tzld.piaoquan.recommend.server.service.rank.RankService;
 import com.tzld.piaoquan.recommend.server.service.rank.RankService;
-import com.tzld.piaoquan.recommend.server.service.recall.strategy.CityRovnAllRovRecallStrategy;
-import com.tzld.piaoquan.recommend.server.service.recall.strategy.CityRovnRecallStrategy;
-import com.tzld.piaoquan.recommend.server.service.recall.strategy.RegionHRecallStrategy;
-import com.tzld.piaoquan.recommend.server.service.recall.strategy.RegionRealtimeRecallStrategyV1;
+import com.tzld.piaoquan.recommend.server.service.recall.strategy.*;
 import com.tzld.piaoquan.recommend.server.util.RecallUtils;
 import com.tzld.piaoquan.recommend.server.util.RecallUtils;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -28,6 +25,9 @@ public class RankSequenceStrategy extends RankService {
             RegionHRecallStrategy.PUSH_FORM,
             RegionHRecallStrategy.PUSH_FORM,
             RegionRealtimeRecallStrategyV1.PUSH_FORM
             RegionRealtimeRecallStrategyV1.PUSH_FORM
     );
     );
+    private static final List<String> personalizationRecall = Lists.newArrayList(
+            PersonalizationTabRovnRecallStrategy.PUSH_FROM
+    );
 
 
     @Override
     @Override
     public List<Video> mergeAndRankRovRecall(RankParam param) {
     public List<Video> mergeAndRankRovRecall(RankParam param) {
@@ -37,6 +37,8 @@ public class RankSequenceStrategy extends RankService {
             TabType type = TabType.getByType(tab.getType());
             TabType type = TabType.getByType(tab.getType());
             if (Objects.equals(TabType.territory, type)) {
             if (Objects.equals(TabType.territory, type)) {
                 this.extractRecall(param, territoryRecall, rovRecallRank);
                 this.extractRecall(param, territoryRecall, rovRecallRank);
+            } else if (Objects.equals(TabType.personalization, type)) {
+                this.extractRecall(param, personalizationRecall, rovRecallRank);
             }
             }
         }
         }
 
 
@@ -47,8 +49,9 @@ public class RankSequenceStrategy extends RankService {
 
 
     private void extractRecall(RankParam param, List<String> recalls, List<Video> videos) {
     private void extractRecall(RankParam param, List<String> recalls, List<Video> videos) {
         Set<Long> setVideo = new HashSet<>();
         Set<Long> setVideo = new HashSet<>();
+        setVideo.add(param.getHeadVid());
         for (String recall : recalls) {
         for (String recall : recalls) {
-            RecallUtils.extractRecall(10000, param, recall, setVideo, videos);
+            RecallUtils.extractRecall(100, param, recall, setVideo, videos);
         }
         }
     }
     }
 
 

+ 89 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/PersonalizationTabRovnRecallStrategy.java

@@ -0,0 +1,89 @@
+package com.tzld.piaoquan.recommend.server.service.recall.strategy;
+
+import com.tzld.piaoquan.recommend.server.model.Tab;
+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;
+import com.tzld.piaoquan.recommend.server.service.filter.FilterService;
+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.recall.RecallStrategy;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Component
+public class PersonalizationTabRovnRecallStrategy implements RecallStrategy {
+
+    @Autowired
+    private FilterService filterService;
+    @Autowired
+    @Qualifier("redisTemplate")
+    public RedisTemplate<String, String> redisTemplate;
+
+    public static final String PUSH_FROM = "personalized_tab_rovn_recall";
+
+    private static final String redisKeyFormat = "personalized_tab_rovn_recall:%s";
+
+    @Override
+    public List<Video> recall(RecallParam param) {
+        List<Video> result = new ArrayList<>();
+
+        Tab tab = param.getTab();
+        if (Objects.isNull(tab) || StringUtils.isBlank(tab.getKey())) {
+            return result;
+        }
+
+        String key = String.format(redisKeyFormat, tab.getKey());
+        String value = redisTemplate.opsForValue().get(key);
+        if (StringUtils.isBlank(value)) {
+            return result;
+        }
+        List<String[]> collect = Arrays.stream(value.split("\t"))
+                .map(i -> i.split(","))
+                .collect(Collectors.toList());
+        if (collect.size() != 2) {
+            return result;
+        }
+        String[] vids = collect.get(0);
+        String[] scores = collect.get(1);
+        if (vids.length != scores.length) {
+            return result;
+        }
+
+        Map<Long, Double> vidAndScoreMap = new HashMap<>();
+        for (int i = 0; i < vids.length; i++) {
+            vidAndScoreMap.put(Long.parseLong(vids[i]), Double.parseDouble(scores[i]));
+        }
+
+        FilterParam filterParam = FilterParamFactory.create(param, new ArrayList<>(vidAndScoreMap.keySet()), pushFrom(), vidAndScoreMap);
+        FilterResult filterResult = filterService.filter(filterParam);
+        if (Objects.isNull(filterResult) || CollectionUtils.isEmpty(filterResult.getVideoIds())){
+            return result;
+        }
+        for (Long videoId : filterResult.getVideoIds()) {
+            Video video = new Video();
+            video.setVideoId(videoId);
+            video.setRovScore(vidAndScoreMap.get(videoId));
+            video.setPushFrom(pushFrom());
+
+            result.add(video);
+        }
+
+
+        return Collections.emptyList();
+    }
+
+    @Override
+    public String pushFrom() {
+        return PUSH_FROM;
+    }
+}