mysql - 社交app如何做多维度的个性化推荐?
天蓬老师
天蓬老师 2017-04-17 13:07:42
[MySQL讨论组]

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

我对这个应用场景的实现非常感兴趣,自己也在尝试实现。我之前也请教过基于地理位置的实现方案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),应该问题不大;

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

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(0)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号