mysql - 社交app如何做多维度的个性化推荐?

 訫梦沁_245 发布于 2022-11-07 07:16

现在,个性化推荐几乎是社交软件的标配了,尤其是基于地理位置、兴趣爱好、在线状态等多维度的个性化推荐。

我对这个应用场景的实现非常感兴趣,自己也在尝试实现。我之前也请教过基于地理位置的实现方案http://www.zhihu.com/question/32205786,应该说,PostgreSQL是最好的方案。不过由于一些原因(比如阿里云最近才支持PostgreSQL,
而且目前还没有在海外节点部署),所以我最终选择的方案是MySQL + ElasticSearch(简称ES)。

需求大概是这样的:
1. 可以对每一个用户进行多维度的个性化推荐,并且可以设置不同维度的比例,比如:地理位置:兴趣爱好:在线状态=7:2:1;
2. 推荐用户具有不重复性:如果样本足够,推荐应该是不重复的;如果样本不够,则推荐的用户在一段时间(比如一周)内是不重复的;

我初步的方案并没有优雅地解决问题,这里仅抛砖引玉,希望能得到大家的意见,开阔一下思路:

  1. 将用户数据导入到ES中,可以基于地理位置、模糊查询、精确查询等做多维度的推荐,不同维度推荐出来的数据需要排重;
  2. 给每一个用户维护一个推荐过的用户列表,将待推荐的用户去该缓冲表里排重后,然后确定各维度的推荐比例后返回;
  3. 如果推荐过的用户需要一段时间后过期,可以使用定时任务定时扫描推荐过的用户列表并过期;

不过,该方案存在的问题有:

  1. 如果去单独的缓冲表里排重,则每次从ES中查询数据的偏移量无法确定(尤其是考虑到过期后的数据又可以被重新推荐),这一点我还没想到比较好的方案;
  2. 每次从ES中查询出来的数据,都需要一一去缓冲表里排重,当缓冲表越来越大,排重的效率会降低;可以考虑将缓冲表放到缓存里(如redis),应该问题不大;

请大家指点(不仅限于上面的方案),尤其是有过类似经验的朋友,谢谢!!!

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有