本文跟大家一起用neo4j一步步搭建简单关联图谱,让大家快速熟悉neo4j的语法。为便于理解,关系数据采用家有儿女中的人物关系。
一、创建节点

match (n) detach delete n
match是匹配操作,小括号(可以想象成小圆)表示节点node,n为标识符,通过该语句可以删除neo4j数据库中所有点。
create (n:Person {name:'夏东海'}) return n

创建家有儿女中主要人物的节点
create (n:Person {name:'刘梅'}) return ncreate (n:Person {name:'刘星'}) return ncreate (n:Person {name:'夏雪'}) return ncreate (n:Person {name:'夏雨'}) return ncreate (n:Person {name:'胡统一'}) return ncreate (n:Person {name:'玛丽'}) return ncreate (n:Person {name:'范晓英'}) return ncreate (n:Person {name:'夏祥'}) return ncreate (n:Person {name:'杨欣'}) return ncreate (n:Person {name:'戴明明'}) return ncreate (n:Person {name:'戴天高'}) return ncreate (n:Person {name:'胖婶'}) return n
运行如下语句
match(n) return n
得到结果如下:

3 创建工作节点和地点节点
create (n:Job {title:'护士长'}) return ncreate (n:Job {title:'学生'}) return ncreate (n:Job {title:'编导'}) return ncreate (n:Job {title:'无业游民'}) return ncreate (n:Job {title:'社区工作人员'}) return ncreate (n:Job {title:'无业游民'}) return ncreate (n:Location {country:'中国',city:'北京'})create (n:Location {country:'美国',city:'纽约'})
match(n) return n

:style
点击右下角的图标可以更换颜色


创建刘梅和夏东海之间的关系
match (a:Person {name:'刘梅'}), (b:Person {name:'夏东海'}) MERGE (a)-[:妻子]->(b)
该语句中的-[:妻子]->表示刘梅是夏东海的妻子。

创建家有儿女中主要人物的关系
match (a:Person {name:'刘梅'}), (b:Person {name:'夏东海'}) MERGE (a)-[:'妻子']->(b)match (a:Person {name:'刘梅'}), (b:Person {name:'夏雨'}) MERGE (a)-[:继母]->(b)match (a:Person {name:'刘梅'}), (b:Person {name:'夏雪'}) MERGE (a)-[:继母]->(b)match (a:Person {name:'刘梅'}), (b:Person {name:'胡统一'}) MERGE (a)-[:前妻]->(b)match (a:Person {name:'刘星'}), (b:Person {name:'刘梅'}) MERGE (a)-[:儿子]->(b)match (a:Person {name:'刘星'}), (b:Person {name:'胡统一'}) MERGE (a)-[:儿子]->(b)match (a:Person {name:'夏东海'}), (b:Person {name:'刘星'}) MERGE (a)-[:继父]->(b)match (a:Person {name:'玛丽'}), (b:Person {name:'夏东海'}) MERGE (a)-[:前妻]->(b)match (a:Person {name:'夏雪'}), (b:Person {name:'夏东海'}) MERGE (a)-[:女儿]->(b)match (a:Person {name:'夏雨'}), (b:Person {name:'夏东海'}) MERGE (a)-[:儿子]->(b)match (a:Person {name:'夏雪'}), (b:Person {name:'玛丽'}) MERGE (a)-[:女儿]->(b)match (a:Person {name:'夏雨'}), (b:Person {name:'玛丽'}) MERGE (a)-[:儿子]->(b)match (a:Person {name:'夏雨'}), (b:Person {name:'夏雪'}) MERGE (a)-[:弟弟]->(b)match (a:Person {name:'夏雪'}), (b:Person {name:'刘星'}) MERGE (a)-[:姐姐]->(b)match (a:Person {name:'刘星'}), (b:Person {name:'夏雨'}) MERGE (a)-[:哥哥]->(b)match (a:Person {name:'戴明明'}), (b:Person {name:'夏雪'}) MERGE (a)-[:朋友]->(b)match (a:Person {name:'戴天高'}), (b:Person {name:'刘梅'}) MERGE (a)-[:同学]->(b)match (a:Person {name:'戴天高'}), (b:Person {name:'戴明明'}) MERGE (a)-[:父亲]->(b)match (a:Person {name:'胖婶'}), (b:Person {name:'刘梅'}) MERGE (a)-[:邻居]->(b)match (a:Person {name:'夏祥'}), (b:Person {name:'夏东海'}) MERGE (a)-[:父亲]->(b)
运行如下语句
match(n) return n
得到结果如下:

创建家有儿女中主要人物的居住地址关系
match (a:Person {name:'刘梅'}),(b:Location {country:'中国',city:'北京'}) MERGE (a)-[:居住]->(b)match (a:Person {name:'夏东海'}),(b:Location {country:'中国',city:'北京'}) MERGE (a)-[:居住]->(b)match (a:Person {name:'玛丽'}),(b:Location {country:'美国',city:'纽约'}) MERGE (a)-[:居住]->(b)
得到结果如下:

创建家有儿女中主要人物职业关系
match (a:Person {name:'刘梅'}),(b:Job {title:'护士长'}) MERGE (a)-[:职业]->(b)match (a:Person {name:'夏东海'}),(b:Job {title:'编导'}) MERGE (a)-[:职业]->(b)match (a:Person {name:'胡统一'}),(b:Job {title:'无业游民'}) MERGE (a)-[:职业]->(b)match (a:Person {name:'夏雨'}),(b:Job {title:'学生'}) MERGE (a)-[:职业]->(b)match (a:Person {name:'刘星'}),(b:Job {title:'学生'}) MERGE (a)-[:职业]->(b)match (a:Person {name:'夏雪'}),(b:Job {title:'学生'}) MERGE (a)-[:职业]->(b)match (a:Person {name:'胖婶'}),(b:Job {title:'社区工作人员'}) MERGE (a)-[:职业]->(b)
得到结果如下:


MATCH (n:Person)WHERE n.name = '夏东海'RETURN n
上面的语句为查询属性名为夏东海的节点,得到结果

MATCH (n)--() RETURN n
得到结果如下:

3 查询单个关系
MATCH (a:Person)-[:职业]->(b:Job {title:'学生'}) RETURN a,b

找到了夏雪、刘星、夏雨三个身份为学生的人。
MATCH (n)-->() RETURN n
得到结果如下:

MATCH (n)-[:父亲]-() RETURN n
得到结果如下:

四、更新图形

1 为节点增加属性
match (n) where id(n)=48 set n.sex = '男' return n;
得到结果如下:

2 为节点增加标签
match (n) where id(n)=33 set n:护士 return n;

3 为关系增加属性
match (n)<-[r]-(m) where id(n)=48 and id(m)=33 set r.team='夫妻' return n;match (n)<-[r]-(m) where id(n)=48 and id(m)=68 set r.team='父子' return n;match (n)<-[r]-(m) where id(n)=48 and id(m)=36 set r.team='父子' return n;
MATCH (n) RETURN n LIMIT 25
得到结果如下:

,大家入门愉快
。这一次想一起推送关于neo4j的几篇文章,大家久等啦,以后我会争取更快的更新频率。大家有好的想法可以写成文章,欢迎联系我发表,可以署上你的名字,并提供相应报酬
。
参考文献
https://zhuanlan.zhihu.com/p/88745411https://www.cnblogs.com/ljhdo/p/5516793.htmlhttps://www.w3cschool.cn/neo4j/neo4j_cql_where_clause.html


扫一扫关注我
19967879837
我的微信号、手机号
文章转载自阿黎逸阳的代码,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




