Neo4j系统实战一

1,696 阅读5分钟

Neo4j系统实战一

Neo4j是一个高性能的图形数据库,查询的语言使用_Cypher_语言,通过创建节点和关系形成强大的节点网络。

目录:

Neo4j基本概念:

标签Label:类比于数据中的一张数据表,比如User表、Product表。
节点Node: 每个标签下可以有N个Node节点,每个节点代表一个对象,相当于数据表里的一行数据,例如一个用户,一部电影,一本书。
**关系Relation:**节点之间的连线代表对象之间的关系;节点和关系都可以带上若干属性。

image.png

常用的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.查询节点、关系。(下面returnx相当于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.关系图谱

image.png

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

参考资料

1.Cypher查询入门
2.Neo4j之Cypher学习总结
3.搜狗明星关系图谱数据