|
@@ -103,6 +103,9 @@ public class RecommendService {
|
|
|
@ApolloJsonValue("${log.upload.field.switch:{}}")
|
|
@ApolloJsonValue("${log.upload.field.switch:{}}")
|
|
|
private Map<String, String> logUploadFieldSwitch;
|
|
private Map<String, String> logUploadFieldSwitch;
|
|
|
|
|
|
|
|
|
|
+ @ApolloJsonValue("${special.apptype.set:[]}")
|
|
|
|
|
+ private Set<Integer> specialAppTypeSet;
|
|
|
|
|
+
|
|
|
public static final String channelGroupPrefix = "alg_recsys_user_channel_group";
|
|
public static final String channelGroupPrefix = "alg_recsys_user_channel_group";
|
|
|
/**
|
|
/**
|
|
|
* wx_user_info 表信息
|
|
* wx_user_info 表信息
|
|
@@ -177,6 +180,11 @@ public class RecommendService {
|
|
|
&& redisTemplate.opsForSet().isMember("special:mid", request.getMid())) {
|
|
&& redisTemplate.opsForSet().isMember("special:mid", request.getMid())) {
|
|
|
return specialMidRecommend(request);
|
|
return specialMidRecommend(request);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ if (CollectionUtils.isNotEmpty(specialAppTypeSet) || specialAppTypeSet.contains(request.getAppType())) {
|
|
|
|
|
+ return specialAppTypeRecommend(request);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
stopwatch.reset().start();
|
|
stopwatch.reset().start();
|
|
|
RecommendParam param = genRecommendParam(request, recommendType);
|
|
RecommendParam param = genRecommendParam(request, recommendType);
|
|
|
long genRecommendParamTime = stopwatch.stop().elapsed(TimeUnit.MILLISECONDS);
|
|
long genRecommendParamTime = stopwatch.stop().elapsed(TimeUnit.MILLISECONDS);
|
|
@@ -363,6 +371,56 @@ public class RecommendService {
|
|
|
.build();
|
|
.build();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ public RecommendResponse specialAppTypeRecommend(RecommendRequest request) {
|
|
|
|
|
+ log.info("hit special apptype recommend request={}", JSONUtils.toJson(request));
|
|
|
|
|
+ if (request == null) {
|
|
|
|
|
+ return RecommendResponse.newBuilder()
|
|
|
|
|
+ .setResult(Result.newBuilder().setCode(1).setMessage("success"))
|
|
|
|
|
+ .build();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ RecallParam recallParam = new RecallParam();
|
|
|
|
|
+ recallParam.setAppType(request.getAppType());
|
|
|
|
|
+ recallParam.setMid(request.getMid());
|
|
|
|
|
+ recallParam.setAppTypeSpecialRecommend(true);
|
|
|
|
|
+ recallParam.setProvince(request.getProvince());
|
|
|
|
|
+ recallParam.setCityCode(request.getCityCode());
|
|
|
|
|
+ recallParam.setSize(request.getSize());
|
|
|
|
|
+
|
|
|
|
|
+ RecallResult recallResult = recallService.recall(recallParam);
|
|
|
|
|
+
|
|
|
|
|
+ RankParam rankParam = new RankParam();
|
|
|
|
|
+ rankParam.setRecallResult(recallResult);
|
|
|
|
|
+ rankParam.setSize(request.getSize());
|
|
|
|
|
+ rankParam.setAppTypeSpecialRecommend(true);
|
|
|
|
|
+
|
|
|
|
|
+ RankResult rankResult = rankRouter.rank(rankParam);
|
|
|
|
|
+
|
|
|
|
|
+ if (Objects.isNull(rankResult) || CollectionUtils.isEmpty(rankResult.getVideos())) {
|
|
|
|
|
+ return RecommendResponse.newBuilder()
|
|
|
|
|
+ .setResult(Result.newBuilder().setCode(1).setMessage("success"))
|
|
|
|
|
+ .build();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 只返回size条数据
|
|
|
|
|
+ List<Video> videos= rankResult.getVideos().subList(0, Math.min(recallParam.getSize(), rankResult.getVideos().size()));
|
|
|
|
|
+
|
|
|
|
|
+ if (CollectionUtils.isNotEmpty(videos)) {
|
|
|
|
|
+ Video lastVideo = videos.get(videos.size() - 1);
|
|
|
|
|
+ redisTemplate.opsForValue().set(lastVideo.getLastVideoKey(), String.valueOf(lastVideo.getVideoId()),
|
|
|
|
|
+ 1, TimeUnit.DAYS);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return RecommendResponse.newBuilder()
|
|
|
|
|
+ .setResult(Result.newBuilder().setCode(1).setMessage("success"))
|
|
|
|
|
+ .addAllVideo(CommonCollectionUtils.toList(videos, v -> VideoProto.newBuilder()
|
|
|
|
|
+ .setPushFrom(Strings.nullToEmpty(v.getPushFrom()))
|
|
|
|
|
+ .setVideoId(v.getVideoId())
|
|
|
|
|
+ .setRovScore(v.getRovScore())
|
|
|
|
|
+ .build()))
|
|
|
|
|
+ .build();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
public RecommendParam genRecommendParam(RecommendRequest request, int recommendType) {
|
|
public RecommendParam genRecommendParam(RecommendRequest request, int recommendType) {
|
|
|
RecommendParam param = new RecommendParam();
|
|
RecommendParam param = new RecommendParam();
|
|
|
param.setTopK(3);
|
|
param.setTopK(3);
|