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,r2.创建节点。语法: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,b5.更新已有标签的属性。使用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 P2.查找跟某某有关系的人,路径长度为1-2MATCH P = (n {name:'刘亦菲'})-[*1..2]-(b ) return P复制代码
参考资料
1.
2.3.