neo4j实现社交推荐(四)

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情

目录

前言

在前三篇中我们基础学会了怎么创建标签节点以及关联关系设置属性的操作,本篇我们实际模拟我们的社交软件中的好友推荐、共同关注等的功能实现。

我们在实现前先考虑一下好友的关系及节点属性,人物之间存在好友关系,关系上带有关系类型及建立时间等属性

实现

创建节点

先创建几个社交用户标签的节点

create (n:SocialUser {name:'李白'}) return n;
create (n:SocialUser {name:'汪伦'}) return n;
create (n:SocialUser {name:'孟浩然'}) return n;
create (n:SocialUser {name:'杜甫'}) return n;
create (n:SocialUser {name:'王昌龄'}) return n;
create (n:SocialUser {name:'贺知章'}) return n;
create (n:SocialUser {name:'高适'}) return n;
create (n:SocialUser {name:'李阳冰'}) return n;
create (n:SocialUser {name:'元丹丘'}) return n;
create (n:SocialUser {name:'孔巢父'}) return n;
create (n:SocialUser {name:'崔成甫'}) return n;
复制代码

上面的都是李白的好友,所以我们指向关系不需要筛选,直接指向标签

match (a:SocialUser {name:'李白'}),(b:SocialUser) 
    where b.name <> '李白' merge (a)-[:FRIEND]->(b) 
    	return a,b
复制代码

查看结果 在这里插入图片描述

接下来创建杜甫的好友,像李白、高适这些已经有的就不需要创建了

create (n:SocialUser {name:'王维'}) return n;
create (n:SocialUser {name:'严武'}) return n;
复制代码

建立杜甫的好友关系

match (a:SocialUser {name:'杜甫'}),(b:SocialUser {name:'李白'}) merge (a)-[:FRIEND]->(b);
match (a:SocialUser {name:'杜甫'}),(b:SocialUser {name:'高适'}) merge (a)-[:FRIEND]->(b);
match (a:SocialUser {name:'杜甫'}),(b:SocialUser {name:'王维'}) merge (a)-[:FRIEND]->(b);
match (a:SocialUser {name:'杜甫'}),(b:SocialUser {name:'严武'}) merge (a)-[:FRIEND]->(b);
复制代码

在这里插入图片描述 从图谱中可以看到高适是李白跟杜甫的共同好友,如果现在加入了一个我的元素,我同时认识李白跟杜甫,那么可以从李白跟杜甫共同关注的人中找到我可能认识的人但是在正式的具体的分析过程中还要加入地域、公司、性别、喜好等属性来加强推荐人的准确性。

猜你喜欢

转载自juejin.im/post/7106447935931416612