基于Neo4j图数据库的社交推荐系统研究与实现

这是一个课程设计项目,要求研究一下非关系数据库,这里选用的是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 相关节点与关系图示

  • 人际关系图
    基于Neo4j图数据库的社交推荐系统研究与实现
  • 用户与爱好之间的关系图
    基于Neo4j图数据库的社交推荐系统研究与实现
  • 用户,动态之间的发布,点赞关系图
    基于Neo4j图数据库的社交推荐系统研究与实现
  • 网络全貌
    基于Neo4j图数据库的社交推荐系统研究与实现

运行展示

  • 注册界面

    对于对每个用户,我们将唯一的 account 作为标识用户的标识符,而在展示的过程中为了方便,我们允许用户设置相同的昵称,同时我们也设置邮箱,这是为了方便后续我们添加密码找回功能。
    基于Neo4j图数据库的社交推荐系统研究与实现

  • 登录界面

    登录界面用于登录用户,输入用户名密码即可登录自己的账户进行管理。
    基于Neo4j图数据库的社交推荐系统研究与实现

  • 首页界面

    首页通过界面展示自己关注的人,关注自己的人,可能认识的人,相同兴趣等功能,具体的功能和实现代码会在后续介绍。基于Neo4j图数据库的社交推荐系统研究与实现

  • 朋友推荐

    • 可能认识的人
      朋友推荐-可能认识的人,就是如果两个人有共同的共同关注的人但是两个人未互相关注,则推荐她们认识。
      基于Neo4j图数据库的社交推荐系统研究与实现
    • 最常互动的人
      功能是如果有人给你的动态点了赞,而且你没有关注这个人,那么就这个就会出现在最常互动的人。
      基于Neo4j图数据库的社交推荐系统研究与实现
    • 兴趣相投的人
      功能是将和用户关注了相同兴趣但未关注的人推荐给当前用户。
      基于Neo4j图数据库的社交推荐系统研究与实现
  • 兴趣部落

    兴趣部落是一个标签,每一个发布的动态都会选择一个标签,同时也可以自己新定义一个标签,关注该标签,则可以看到该动态下的所有动态。
    基于Neo4j图数据库的社交推荐系统研究与实现

  • 动态功能

    • 发布动态界面
      这是最核心的功能之一,类似微博动态、qq 的好友动态、微信的朋友圈功能,可以选择自己的标签,同时允许关注自己的人看到自己动态,主要功能是可以发布图片,为图片添加文字,选择自己的位置。
      基于Neo4j图数据库的社交推荐系统研究与实现
    • 好友动态界面
      这个功能比较简单,就是展示关注了的朋友的动态。
      基于Neo4j图数据库的社交推荐系统研究与实现
    • 推荐动态界面
      这个功能比较简单,但是比较重要,就是为了让有相同兴趣的人,可以看到对方的动态,从而友好的交流。兴趣部落的创建在前面介绍过。
      基于Neo4j图数据库的社交推荐系统研究与实现

完整项目地址

github:点击这里
gitee:点击这里

上一篇:知识图谱task02


下一篇:Datawhale知识图谱 Task05 Neo4j 图数据库查询