Przeglądaj źródła

Merge branch 'feature/sunxy/202403/blessOpmtize' of algorithm/recommend-server into master

sunxiaoyi 1 rok temu
rodzic
commit
2dcdbf5349

+ 2 - 5
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/RankService.java

@@ -67,8 +67,8 @@ public class RankService {
         }
         // 1 通过 apptype 判断该小程序走怎样的排序策略。
         if (param.getAppType() == AppTypeEnum.PIAO_QUAN_MEIHAO_ZHUFU.getCode() && Objects.equals(param.getCategoryId(), 100)) {
-            List<Video> results = new ArrayList<>();
-            results.addAll(extractAndSort(param, BlessRecallStrategy.PUSH_FORM));
+            List<Video> results = new ArrayList<>(extractAndSort(param, BlessRecallStrategy.PUSH_FORM));
+            removeDuplicate(results);
             List<String> videoIdKeys = results.stream()
                     .map(t -> param.getRankKeyPrefix() + t.getVideoId())
                     .collect(Collectors.toList());
@@ -80,9 +80,6 @@ public class RankService {
                 }
                 Collections.sort(results, Comparator.comparingDouble(o -> -o.getSortScore()));
             }
-            results.addAll(extractAndSort(param, RegionRealtimeRecallStrategyV2.PUSH_FORM));
-            results.addAll(extractAndSort(param, RegionRealtimeRecallStrategyV3.PUSH_FORM));
-            removeDuplicate(results);
             return new RankResult(results);
         }
 

+ 0 - 2
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/RecallService.java

@@ -86,8 +86,6 @@ public class RecallService implements ApplicationContextAware {
             strategies.addAll(getRegionRecallStrategy(param));
         } else if (param.getAppType() == AppTypeEnum.PIAO_QUAN_MEIHAO_ZHUFU.getCode() && Objects.equals(param.getCategoryId(), 100)) {
             strategies.add(strategyMap.get(BlessRecallStrategy.class.getSimpleName()));
-            strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV2.class.getSimpleName()));
-            strategies.add(strategyMap.get(RegionRealtimeRecallStrategyV3.class.getSimpleName()));
             return strategies;
         } else {
             switch (abCode) {

+ 63 - 66
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score4recall/strategy/BlessRecallScore.java

@@ -1,17 +1,16 @@
 package com.tzld.piaoquan.recommend.server.service.score4recall.strategy;
 
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
 import com.tzld.piaoquan.recommend.server.service.score.ScorerConfigInfo;
 import com.tzld.piaoquan.recommend.server.service.score4recall.AbstractScorer4Recall;
 import com.tzld.piaoquan.recommend.server.service.score4recall.model4recall.Model4RecallKeyValue;
-import com.tzld.piaoquan.recommend.server.util.ListMerger;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.tuple.Pair;
 
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 
@@ -33,76 +32,74 @@ public class BlessRecallScore extends AbstractScorer4Recall {
         if (model == null || model.kv == null) {
             return new ArrayList<>();
         }
-        LocalDateTime now = LocalDateTime.now();
-        // 节日祝福-每年
-        List<Pair<Long, Double>> yearResult = new ArrayList<>();
-        String yearlyFestivalTimeRange = params.get("yearly_festival_time_range");
-        if (StringUtils.isBlank(yearlyFestivalTimeRange)) {
-            return new ArrayList<>();
-        }
-        JSONObject jsonObject = JSONObject.parseObject(yearlyFestivalTimeRange);
-        for (String festival : jsonObject.keySet()) {
-            try {
-                JSONArray jsonArray = jsonObject.getJSONArray(festival);
-                if (jsonArray == null) {
-                    continue;
-                }
-                List<String> timeRangeList = jsonArray.toJavaList(String.class);
-                if (isFestivalTime(now, timeRangeList)) {
-                    Pair<LocalDateTime, LocalDateTime> startTimeAndEndTime = getStartTimeAndEndTime(timeRangeList.get(0));
-                    if (startTimeAndEndTime == null) {
-                        continue;
-                    }
-                    // 节日峰值设置为结束时间的当天的7点
-                    double weight = DynamicGaussianFunction.calculateValue(LocalDateTime.now(), startTimeAndEndTime.getLeft(),
-                            startTimeAndEndTime.getRight(), startTimeAndEndTime.getRight().withHour(7));
-                    List<Pair<Long, Double>> festivalLists = model.kv.getOrDefault(festival, new ArrayList<>());
-                    if (festivalLists.isEmpty()) {
-                        continue;
-                    }
-                    festivalLists = festivalLists.stream().map(pair -> Pair.of(pair.getLeft(), weight))
-                            .limit(Math.min(50, festivalLists.size()))
-                            .collect(Collectors.toList());
-                    yearResult.addAll(festivalLists);
-                }
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-        List<Pair<Long, Double>> dayResult = new ArrayList<>();
-        // 每日祝福-每天固定时间段
-        String dailyFestivalTimeRange = params.get("daily_bless_time_range");
-        if (StringUtils.isBlank(dailyFestivalTimeRange)) {
-            return new ArrayList<>();
-        }
-        JSONObject dailyFestivalTimeRangeJson = JSONObject.parseObject(dailyFestivalTimeRange);
-        for (String bless : dailyFestivalTimeRangeJson.keySet()) {
-            try {
-                String timeRange = dailyFestivalTimeRangeJson.getString(bless);
-                if (isFestivalTime(now, Collections.singletonList(timeRange))) {
-                    List<Pair<Long, Double>> festivalLists = model.kv.getOrDefault(bless, new ArrayList<>());
-                    if (festivalLists.isEmpty()) {
-                        continue;
-                    }
-                    festivalLists = festivalLists.stream().map(pair -> Pair.of(pair.getLeft(), 0.0))
-                            .limit(Math.min(50, festivalLists.size()))
-                            .collect(Collectors.toList());
-                    dayResult.addAll(festivalLists);
-                }
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
+//        LocalDateTime now = LocalDateTime.now();
+//        // 节日祝福-每年
+//        List<Pair<Long, Double>> yearResult = new ArrayList<>();
+//        String yearlyFestivalTimeRange = params.get("yearly_festival_time_range");
+//        if (StringUtils.isBlank(yearlyFestivalTimeRange)) {
+//            return new ArrayList<>();
+//        }
+//        JSONObject jsonObject = JSONObject.parseObject(yearlyFestivalTimeRange);
+//        for (String festival : jsonObject.keySet()) {
+//            try {
+//                JSONArray jsonArray = jsonObject.getJSONArray(festival);
+//                if (jsonArray == null) {
+//                    continue;
+//                }
+//                //                if (isFestivalTime(now, timeRangeList)) {
+////                    Pair<LocalDateTime, LocalDateTime> startTimeAndEndTime = getStartTimeAndEndTime(timeRangeList.get(0));
+////                    if (startTimeAndEndTime == null) {
+////                        continue;
+////                    }
+//                    // 节日峰值设置为结束时间的当天的7点
+////                    double weight = DynamicGaussianFunction.calculateValue(LocalDateTime.now(), startTimeAndEndTime.getLeft(),
+////                            startTimeAndEndTime.getRight(), startTimeAndEndTime.getRight().withHour(7));
+//                    List<Pair<Long, Double>> festivalLists = model.kv.getOrDefault(festival, new ArrayList<>());
+//                    if (festivalLists.isEmpty()) {
+//                        continue;
+//                    }
+//                    festivalLists = festivalLists.stream().map(pair -> Pair.of(pair.getLeft(), 0.0))
+//                            .limit(Math.min(200, festivalLists.size()))
+//                            .collect(Collectors.toList());
+//                    yearResult.addAll(festivalLists);
+////                }
+//            } catch (Exception e) {
+//                e.printStackTrace();
+//            }
+//        }
+//        List<Pair<Long, Double>> dayResult = new ArrayList<>();
+//        // 每日祝福-每天固定时间段
+//        String dailyFestivalTimeRange = params.get("daily_bless_time_range");
+//        if (StringUtils.isBlank(dailyFestivalTimeRange)) {
+//            return new ArrayList<>();
+//        }
+//        JSONObject dailyFestivalTimeRangeJson = JSONObject.parseObject(dailyFestivalTimeRange);
+//        for (String bless : dailyFestivalTimeRangeJson.keySet()) {
+//            try {
+//                String timeRange = dailyFestivalTimeRangeJson.getString(bless);
+//                if (isFestivalTime(now, Collections.singletonList(timeRange))) {
+//                    List<Pair<Long, Double>> festivalLists = model.kv.getOrDefault(bless, new ArrayList<>());
+//                    if (festivalLists.isEmpty()) {
+//                        continue;
+//                    }
+//                    festivalLists = festivalLists.stream().map(pair -> Pair.of(pair.getLeft(), 0.0))
+//                            .limit(Math.min(50, festivalLists.size()))
+//                            .collect(Collectors.toList());
+//                    dayResult.addAll(festivalLists);
+//                }
+//            } catch (Exception e) {
+//                e.printStackTrace();
+//            }
+//        }
         // 常规祝福类的小程序-任意时间
         List<Pair<Long, Double>> anyResult = new ArrayList<>();
         List<Pair<Long, Double>> festivalLists = model.kv.getOrDefault("祝福", new ArrayList<>());
         if (!festivalLists.isEmpty()) {
             festivalLists = festivalLists.stream().map(pair -> Pair.of(pair.getLeft(), 0.0))
-                    .limit(Math.min(50, festivalLists.size()))
                     .collect(Collectors.toList());
             anyResult.addAll(festivalLists);
         }
-        return ListMerger.mergeLists(yearResult, dayResult, anyResult);
+        return anyResult;
     }
 
     public Pair<LocalDateTime, LocalDateTime> getStartTimeAndEndTime(String timeRangeList) {