用户行为评分
本业务通过对用户行为 动态,小视频 浏览行为 进行评分,并将统计数据分别记录到 动态推荐与视频推荐表中
其中与log记录共用一个交换机 tanhua.log.exchange , routingKey则各自换成 log.movement/video
以动态为例
1.动态评分实体类
//大数据动态评分实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document("recomment_movement_score")
public class MovementScore {
private ObjectId id;
private Long userId;// 用户id
private Long movementId; //动态id,需要转化为Long类型
private Double score; //得分
private Long date; //时间戳
}
2.监听行为,统计评分
@Component
public class RecommendMovementListener {
@Autowired
private MongoTemplate mongoTemplate;
@RabbitListener(bindings = @QueueBinding(
value = @Queue(
value = "tanhua.movement.queue",
durable = "true"
),
exchange = @Exchange(
value = "tanhua.log.exchange",
type = ExchangeTypes.TOPIC),
key = {"log.movement"})
)
public void recommend(String message) throws Exception {
System.out.println("处理动态消息:"+message);
try {
Map<String, Object> map = JSON.parseObject(message);
//1、获取数据
Long userId = Long.valueOf(map.get("userId").toString());
String date = (String) map.get("date");
String busId = (String) map.get("busId");
String type = (String) map.get("type");
Movement movement = mongoTemplate.findById(busId, Movement.class);
if(movement != null) {
MovementScore ms = new MovementScore();
ms.setUserId(userId);
ms.setDate(System.currentTimeMillis());
ms.setMovementId(movement.getPid());
ms.setScore(getScore(type,movement));
mongoTemplate.save(ms);
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static Double getScore(String type,Movement movement) {
//0201为发动态 基础5分 50以内1分,50~100之间2分,100以上3分
//0202为浏览动态, 1
//0203为动态点赞, 5
//0204为动态喜欢, 8
//0205为评论, 10
//0206为动态取消点赞, -5
//0207为动态取消喜欢 -8
Double score = 0d;
switch (type) {
case "0201":
score = 5d;
score += movement.getMedias().size();
int length = StrUtil.length(movement.getTextContent());
if (length >= 0 && length < 50) {
score += 1;
} else if (length < 100) {
score += 2;
} else {
score += 3;
}
break;
case "0202":
score = 1d;
break;
case "0203":
score = 5d;
break;
case "0204":
score = 8d;
break;
case "0205":
score = 10d;
break;
case "0206":
score = -5d;
break;
case "0207":
score = -8d;
break;
default:
break;
}
return score;
}
}

浙公网安备 33010602011771号