Closed liutao-lx closed 3 years ago
是的,目前只有在对接推荐系统的地方用到了mongoDB作为一个中间件传输数据,其他的没有找到合适的场景去使用它。你觉得需要在什么地方用到呢?
您好,我只看见了查询MongoDB代码,添加数据到推荐系统MongoDB代码我似乎没找到,我一直卡在这里
是的,目前只有在对接推荐系统的地方用到了mongoDB作为一个中间件传输数据,其他的没有找到合适的场景去使用它。你觉得需要在什么地方用到呢?
在goods服务的RecommendProductServiceImpl的getRealtimeRecommend()方法
public Message<Page
if(userId == null){
log.info("智能推送{}---->商城首页"," userId == null ");
return productInfoService.getProductBriefInfoByPage(currentPage, pageSize);
}
//获得存储在redis中的实时推荐的商品id的list
String redisKey = RedisUtil.getProductRealtimeRecommendListKey(userId);
Boolean aBoolean = redisTemplate.hasKey(redisKey);
//直接返回redis的的数据
if(aBoolean){
log.info("智能推送{}---->商城首页","redis存储实时推荐商品id的list");
return getInfoFromRedis(pageSize, currentPage, redisKey);
}
//MongoDB的数据,这里找不到数据所以每次推荐都是离线推荐
ProductRealtimeRecommendDto recommendInfo = productRealtimeRecommendRepository.findByUserId(userId);
List<MongoProductInfo> recs = null;
if(recommendInfo != null){
recs = recommendInfo.getRecs();
}
String userBrowseRecordBitmap = RedisUtil.getUserBrowseRecordBitmap(BrowserType.ES_SELL_PRODUCT, userId);
//当实时推荐中没有商品时,转到离线推荐
if(CollectionUtils.isEmpty(recs)) {
log.info("智能推送{}---->商城首页","实时推荐没有商品转离线推荐");
return getOfflineRecommendListByUserId(pageSize, currentPage, userId);
}
//将商品信息存入redis中
List<Long> ids = recs.stream().map(MongoProductInfo::getProductId).collect(Collectors.toList());
ids.stream().forEach(id -> {
if(commands.getbit(userBrowseRecordBitmap.getBytes(), id) == null){
redisTemplate.opsForSet().add(redisKey, id);
}
});
return getInfoFromRedis(pageSize, currentPage, redisKey);
}
似乎没有添加到MongoDB的功能