浏览代码

多样性实验

zhangbo 1 年之前
父节点
当前提交
f7a8239adc

+ 5 - 4
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/ViewedService.java

@@ -29,7 +29,7 @@ import java.util.concurrent.TimeUnit;
 @Slf4j
 public class ViewedService {
     private Map<Integer, List<Integer>> viewedTypesMap = new HashMap<>();
-    private List<Integer> defaultViewedTypes = Lists.newArrayList(1, 6, 7);
+    private List<Integer> defaultViewedTypes = Lists.newArrayList(1, 6, 7, 5);
 
     @Value("${video.filter.url:}")
     private String videoFilterUrl;
@@ -39,9 +39,10 @@ public class ViewedService {
 
     @PostConstruct
     public void init() {
-        viewedTypesMap.put(0, Lists.newArrayList(1, 6));
-        viewedTypesMap.put(4, Lists.newArrayList(1, 6));
-        viewedTypesMap.put(13, Lists.newArrayList(1));
+//        1-已观看 2-视频状态 3-是否进入老年人社区 4-话题状态 5-推荐状态 6-白名单过滤 7-涉政视频过滤
+        viewedTypesMap.put(0, Lists.newArrayList(1, 6, 5));
+        viewedTypesMap.put(4, Lists.newArrayList(1, 6, 5));
+        viewedTypesMap.put(13, Lists.newArrayList(1, 5));
     }
 
 

+ 29 - 6
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/RankService.java

@@ -23,6 +23,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.RandomUtils;
 import org.apache.commons.lang3.math.NumberUtils;
+import com.alibaba.fastjson.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.redis.core.RedisTemplate;
@@ -394,6 +395,19 @@ public class RankService {
     }
 
     private RankResult mergeAndSort4Density(RankParam param, List<Video> rovRecallRank, List<Video> flowPoolRank) {
+        // 测试,添加数据
+//        rovRecallRank.add(0, getTestVideo(1070462L, ""));
+//        rovRecallRank.add(0, getTestVideo(1085062L, ""));
+//        rovRecallRank.add(0, getTestVideo(1102552L, ""));
+//        rovRecallRank.add(0, getTestVideo(1115929L, ""));
+//
+//        flowPoolRank = new ArrayList<>();
+//        flowPoolRank.add(getTestVideo(1263931L, "flow"));
+//        flowPoolRank.add(getTestVideo(1284797L, "flow"));
+//        flowPoolRank.add(getTestVideo(1289001L, "flow"));
+//        flowPoolRank.add(getTestVideo(1331503L, "flow"));
+
+
         if (CollectionUtils.isEmpty(rovRecallRank)) {
             if (param.getSize() < flowPoolRank.size()) {
                 return new RankResult(flowPoolRank.subList(0, param.getSize()));
@@ -414,13 +428,15 @@ public class RankService {
                 if (!entry.getValue().containsKey(appType)){
                     continue;
                 }
-                String str = (String) entry.getValue().get(appType);
-                Map<String, Object> tmp = JSONUtils.fromJson(str,
-                        new TypeToken<Map<String, Object>>() {},
-                        Collections.emptyMap());
-                if (tmp.containsKey("density") && tmp.get("density") instanceof Integer){
-                    densityRules.put(k, (Integer)tmp.get("density"));
+                JSONObject jb = (JSONObject) entry.getValue().get(appType);
+                try{
+                    if (jb.containsKey("density") && jb.get("density") instanceof Integer){
+                        densityRules.put(k, jb.getInteger("density"));
+                    }
+                }catch (Exception e){
+                    log.error("parse densityRules is wrong:", e);
                 }
+
             }
         }
         // 2 读取video的tags
@@ -487,4 +503,11 @@ public class RankService {
         return new RankResult(resultWithDnsity);
     }
 
+//    public Video getTestVideo(Long id, String s){
+//        Video a1 = new Video();
+//        a1.setVideoId(id);
+//        a1.setFlowPool(s);
+//        return a1;
+//    }
+
 }

+ 3 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/processor/RankProcessorDensity.java

@@ -92,7 +92,9 @@ public class RankProcessorDensity {
                 // 更新状态
                 Set<String> tags2 = new HashSet<>(videoNew.getTags());
                 for (String tag : tags2) {
-                    statusCur.put(tag, statusCur.getOrDefault(tag, 0) + 1);
+                    if (rule.containsKey(tag)){
+                        statusCur.put(tag, statusCur.getOrDefault(tag, 0) + 1);
+                    }
                 }
                 break;
             }