这是一个课程设计项目,要求研究一下非关系数据库,这里选用的是neo4j图数据库,查阅资料发现neo4j经常被用作社交的推荐系统,故简单设计了一个社交推荐系统并实现。
开发环境和框架
- 系统:Ubuntu 18.04 LTS
- IDE:JetBrains Intelij IDEA
- 语言:Java 1.8
- 框架:SpringBoot 2.4.1,Thymeleaf,Bootstrap
- 交互技术:ajax
实现的功能
给用户提供一个与相同爱好者交流联系的平台,系统会通过你的标签,对哪些更加有兴趣,经过好友推荐的算法自动推荐更多与你兴趣相投,志同道合的人。同时,用户可以知道你关注的人对哪些方面感兴趣,以及感兴趣程度,还可以看到他所关注的人,进一步扩展社交圈子,与更多的人交流来往,了解更多的知识,发现更多自己以往不了解的趣事。
功能列表:
(1)实现登录,注册功能
(2)显示关注、被关注用户
(3)通过自定义标签显示兴趣一样的用户
(4)通过共同好友推荐可能认识的人
(5)发布与兴趣关联的动态
(6)可以看到关注兴趣下的动态
(7)可以给其他用户动态点赞,并以此为依据推荐到最常互动的结果中
(8)完成图形化交互界面
功能介绍
系统功能 | 功能概述 |
---|---|
注册 | 注册用户名密码用来登录社交平台 |
登录 | 输入用户名密码登录个人社交平台 |
首页 | 查看好友动态、关注自己的人、自己关注的人等 |
朋友推荐-可能认识的人 | 自己关注的人再关注的人而自己未关注的人 |
朋友推荐-最常互动的人 | 给自己动态点赞的,而自己没关注对方的人 |
朋友推荐-趣味相投的人 | 关注了相同的兴趣部落,但是未关注对方的人 |
兴趣部落 | 创建或关注相关的兴趣部落 |
发现动态-发布动态 | 设置相关兴趣发布个人动态 |
发现动态-推荐动态 | 关注的兴趣部落的发布动态 |
发现动态-好友动态 | 关注的好友发布的动态 |
数据库设计
1 节点
- 用户 User:{id, name, age, sex, password, address, sign}
- 爱好 Hobby:{name,htype}
- 动态 Share:{content,imgurl, time, address, title}
2 关系
- 关注 Follow:{time}:
用户节点与用户节点之间(可以单向连接,也可以双向连接); - 喜欢 Like:{count}:
用户节点与兴趣节点之间的关系(从用户节点双向连接到兴趣节点); - 发布 Publish:{image,text, location}:
用户节点与动态节点之间的关系(从用户节点单向连接到动态节点); - 点赞 Praise:{time}:
用户节点与动态节点之间的关系(从动态节点单向连接到用户节点)。
3 相关节点与关系图示
- 人际关系图
- 用户与爱好之间的关系图
- 用户,动态之间的发布,点赞关系图
- 网络全貌
运行展示
-
注册界面
对于对每个用户,我们将唯一的 account 作为标识用户的标识符,而在展示的过程中为了方便,我们允许用户设置相同的昵称,同时我们也设置邮箱,这是为了方便后续我们添加密码找回功能。
-
登录界面
登录界面用于登录用户,输入用户名密码即可登录自己的账户进行管理。
-
首页界面
首页通过界面展示自己关注的人,关注自己的人,可能认识的人,相同兴趣等功能,具体的功能和实现代码会在后续介绍。
-
朋友推荐
-
兴趣部落
兴趣部落是一个标签,每一个发布的动态都会选择一个标签,同时也可以自己新定义一个标签,关注该标签,则可以看到该动态下的所有动态。
-
动态功能