Neo4j系统实战一
Neo4j是一个高性能的图形数据库,查询的语言使用_Cypher_语言,通过创建节点和关系形成强大的节点网络。
Neo4j基本概念:
标签Label:类比于数据中的一张数据表,比如User表、Product表。
节点Node: 每个标签下可以有N个Node节点,每个节点代表一个对象,相当于数据表里的一行数据,例如一个用户,一部电影,一本书。
**关系Relation:**节点之间的连线代表对象之间的关系;节点和关系都可以带上若干属性。
常用的Neo4j命令、函数:
序号 | 命令 | 描述 |
---|---|---|
1 | CREATE 创建 | 创建节点、关系、属性 |
2 | MATCH 匹配、查询 | 检索有关节点,关系和属性数据 |
3 | RETURN 返回 | 返回查询结果(属性或图形) |
4 | WHERE 条件 | 检索数据的过滤条件 |
5 | DELETE 删除 | 删除节点和关系,需要配合MATCH命令一起使用 |
6 | REMOVE 删除 | 删除标签Label和属性,需要配合MATCH命令一起使用 |
7 | ORDER BY 排序 | 排序检索的数据 |
8 | SET 更新 | 添加或更新标签 |
9 | SKIP 跳过 | 跳过多少行,即从第几行开始检索数据 |
10 | UNION 联合 | 把多个MATCH的RETURN结果,组合成一个结果集,会自动去掉重复行 |
11 | UNION ALL 联合不去重 | 同上,但是结果不去重 |
12 | IN 包括 | 语法使用中括号[],包含数据 |
13 | INDEX 索引 | 使用CREATE 创建索引,提高数据检索性能 |
14 | EXPAIN | EXPANIN MATCH结合使用,查看执行计划,以便提高性能优化 |
15 | allshortestPath 查询路径、层级 | 返回所有路径、层级 |
16 | shortestPath 随机一个路径、层级 | 随机返回一个路径、层级 |
语法案例实战:
1.删除所有标签、属性和关系。注:只应用于测试,三思而后用,后果非常严重。
MATCH (n) OPTIONAL MATCH (n)-[r]-() DELETE n,r
2.创建节点。语法:CREATE(名称:标签{属性键值对})
eg:CREATE (小芳:人 {id:"xiaofang",name:"小芳",age:18})
eg:批量创建
CREATE (小芳:人 {id:"xiaofang",name:"小芳",age:18}),
(张三:人 {id:"zhangsan",name:"张三",age:38})
3.查询节点、关系。(下面return的x相当于sql中select *中的内容)
语法1:MATCH(变量名:标签 {条件键值对}) return x
语法2:MATCH(变量名:标签) where 变量名.id='xx' return x
eg:MATCH (n:人 {name:"小芳"}) return n 注:查询
4.创建关系,先用MATCH查询出来,再用MERGE进行创建
注:使用MATCH查询出张三和小芳,然后使用MERGE建立关系。
eg:MATCH (a:人 {name:"张三"}),(b:人 {name:"小芳"}) MERGE (b)-[:父亲]->(a) return a,b
5.更新已有标签的属性。使用SET。
语法:MATCH (n:Person {xx:'xxx'}) set n.xx1=xx1, n.xx2=xx2 return n
eg:为“张三”添加两个属性,身高height和体重weight
MATCH (n:人 {name:'张三'}) SET n.height=178, n.weight=130 return n
6.删除操作,DELETE、REMOVE
6.1:删除节点关系,查询出a和b的关系x,使用delete删除关系x
MATCH (a:人 {name:"小芳"})-[x:父亲]->(b:人 {name:"张三"}) delete x
6.2:删除属性,查询出标签,使用remove删除xxx属性
MATCH (a:人 {name:"张三"}) remove a.weight return a
6.3:删除标签
MATCH (a:XX) remove a:XX
7.排序Order By、Limit多少行、Skip跳过多少行
eg:用法和SQL类似。
MATCH (n:Person) RETURN n order by n.id desc LIMI 25
MATCH (n:Person) RETURN n order by n.id desc skip 2 LIMI 25
8.唯一约束 CONSTRAINT 可以给定某个属性设置唯一约束
给名称设置唯一约束:
CREATE CONSTRAINT ON(a:Person) ASSERT a.name IS UNIQUE
9.查询几层关系,最短路径。关系链路越短,代表这两个节点越密切
两个函数:allshortestPath返回所有路径、shortestPath随机返回一个路径
eg:
MATCH P = shortestPath((n:Person {id:'mama'})-[*..3]-(b:Person {id:'nainai'})) return P
复制代码
落地实战
1.整理关系
1.整理关系:
刘亦菲-父亲->安少康
刘亦菲-母亲->刘晓莉
刘亦菲-义父->陈金飞
刘亦菲-前男友->宋承宪
刘亦菲-闺蜜->唐嫣
刘亦菲-搭档->胡歌
胡歌-好友->谢娜
胡歌-前女友->江疏影
胡歌-基友->霍建华
胡歌-好友->杨幂
霍建华-妻子->林心如
霍建华-前女友->陈乔恩
霍建化-搭档->杨紫
霍建化-好友->杨幂
复制代码
2.创建节点和关系
CREATE (刘亦菲:明星 {name:"刘亦菲"}),
(安少康:名人 {name:"安少康"}),
(刘晓莉:名人 {name:"刘晓莉"}),
(陈金飞:名人 {name:"陈金飞"}),
(宋承宪:名人 {name:"宋承宪"}),
(唐嫣:明星 {name:"唐嫣"}),
(胡歌:明星 {name:"胡歌"}),
(谢娜:明星 {name:"谢娜"}),
(江疏影:名人 {name:"江疏影"}),
(霍建华:明星 {name:"霍建华"}),
(杨幂:明星 {name:"杨幂"}),
(林心如:明星 {name:"林心如"}),
(陈乔恩:明星 {name:"陈乔恩"}),
(杨紫:明星 {name:"杨紫"}),
(刘亦菲)-[:父亲]->(安少康),
(刘亦菲)-[:母亲]->(刘晓莉),
(刘亦菲)-[:义父]->(陈金飞),
(刘亦菲)-[:前男友]->(宋承宪),
(刘亦菲)-[:闺蜜]->(唐嫣),
(刘亦菲)-[:搭档]->(胡歌),
(胡歌)-[:好友]->(谢娜),
(胡歌)-[:前女友]->(江疏影),
(胡歌)-[:基友]->(霍建华),
(胡歌)-[:好友]->(杨幂),
(霍建华)-[:妻子]->(林心如),
(霍建华)-[:前女友]->(陈乔恩),
(霍建华)-[:搭档]->(杨紫),
(霍建华)-[:好友]->(杨幂)
复制代码
3.关系图谱
4.数据钻取
1.查询某个标签节点的关系,例如,刘亦菲和林心如在3层关系中
MATCH P = shortestPath((n:明星 {name:'刘亦菲'})-[*..3]-(b:明星 {name:'林心如'})) return P
2.查找跟某某有关系的人,路径长度为1-2
MATCH P = (n {name:'刘亦菲'})-[*1..2]-(b ) return P
复制代码