一、Neo4j环境搭建
Neo4j高性能图数据库从入门到实战学习视频
neo4j官方下载连接
window傻瓜式安装,点击下一步下一步
首页界面介绍
二、Neo4j构建的元素
节点
节点表示一个具体的实体。
节点可以包含:
一个或多个属性
一个或多个标签
关系
关系用于连接2个节点
关系可以包含:
一个或多个属性
一个或多个标签
要注意的是:
关系是具有方向性的,而且有3种情况:单向向左、单向向右、双向。但是neo4j好像并没有实现双向关系。要在业务中实现双向关系,貌似要通过2个单向关系来实现
标签
类似于java的类的概念,定义某类节点或某类关系。
比如:张三节点的标签是人,李四节点的标签也是人;比如兄弟关系的标签是家庭,兄妹关系的标签也是家庭。
标签可以被索引,所以建合适的标签可以提高搜索速度
语法:
:标签1
:标签1:标签2
比如:CREATE (n:西游记:人物 {name:'张三'}) RETURN n
属性
节点和关系都能拥有一个或多个属性。
语法:
{属性key:"属性value", 属性key:"属性value"}
三、CQL
CQL代表Cypher查询语言,用于查询图库的查询语言,类比SQL用于查询关系型数据库。
CQL命令 | 用法 |
---|---|
CREATE | 创建节点,关系和属性 |
MATCH | 检索有关节点,关系和属性数据 |
RETURN | 返回查询结果 |
WHERE | 提供条件过滤检索数据 |
DELETE | 删除节点和关系 |
REMOVE | 删除节点和关系的属性 |
ORDER BY | 排序检索数据 |
SET | 添加或更新标签 |
理解CQL
节点(小括号表示节点)
CQL中,()表示一个节点。比如:(n:person {name:‘如来’})
()表示一个节点
n表示给这个节点起个别名
person表示给这个节点设置一个标签
{}里表示给这个节点设置什么属性
关系(中括号表示关系)
CQL中,[]表示一个关系。关系两边要有节点,并且要设置方向,比如
() - [] -> ()
但在neo4j中,一条关系只能有一个方向,不能同时指向两个节点。
但允许一条关系的开始节点和结束节点都是自己。
CREATE
创建一个节点
# 下面两个是等价的
CREATE ()
CREATE (n)
# 只不过CREATE(n) 相当于给这个节点起个别名,可以直接RETURN
CREATE (n) RETURN n
# 创建一个节点
CREATE (n:西游记{name: "孙悟空"})
# 一次性创建多个节点
CREATE (n:西游记 {name: "猪八戒"}), (m:西游记 {name: "沙僧"})
创建关系
# 创建新的节点,并且同时给新的节点创建关系
CREATE (n:`西游记`{name:"唐僧"}) - [r:`坐骑`{attr:"属性"}]-> (m:`西游记`{name:"白龙马"})
return n, m
# 在已经被创建好的节点之间,创建1条关系
MATCH (n:`西游记`{name:"孙悟空"}), (m:`西游记`{name:"猪八戒"})
CREATE (n) -[r:师弟{attr:"属性"}]-> (m)
return n, m
# 在已经被创建好的节点之间,创建多条关系
MATCH (swk:`西游记`{name:"孙悟空"}), (zbj:`西游记`{name:"猪八戒"}), (ss:`西游记`{name:"沙僧"}), (ts:`西游记`{name:"唐僧"})
CREATE (swk) -[:师傅{attr:"属性"}]-> (ts), (zbj) -[:师傅{attr:"属性"}]-> (ts), (ss) -[:师傅{attr:"属性"}]-> (ts)
return swk, zbj, ss
# neo4j,关系可以自己指向自己的
MATCH (n:`学习` {name:'张三'})
CREATE (n)-[:自恋]->(n)
RETURN n
DELETE
删除所有节点和关系
MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r
或
MATCH (n) DETACH DELETE n
根据id去删除单个节点
MATCH (n)
WHERE id(n)=4
DELETE n
RETURN n
根据id去删除单个关系
MATCH ()-[r]-() Where ID(r)=4 Delete r
根据2个节点和关系方向,删除关系
# 搭建测试数据
CREATE (:`学习` {name: '张三'}),(:`学习` {name: '李四'}),(:`学习` {name: '王五'});
MATCH (p1:`学习` {name: '张三'}), (p2:`学习` {name: '李四'}), (p3:`学习` {name: '王五'})
CREATE (p1)-[:认识]->(p2)-[:认识]->(p1)-[:认识]->(p3)
RETURN p1,p2,p3
# 删除张三认识李四的关系,保留李四认识张三
MATCH (n:`学习` {name:'张三'}),(m:`学习` {name:'李四'})
OPTIONAL MATCH (n)-[r]->(m)
DELETE r
同时删除指定的节点和它的关系
# 搭建测试数据
CREATE (:`学习` {name: '张三'}),(:`学习` {name: '李四'}),(:`学习` {name: '王五'});
MATCH (p1:`学习` {name: '张三'}), (p2:`学习` {name: '李四'}), (p3:`学习` {name: '王五'})
CREATE (p1)-[:认识]->(p2)-[:认识]->(p1)-[:认识]->(p3)
RETURN p1,p2,p3
# 删除张三节点,同时删除跟张三有关的关系
MATCH (n:`学习` {name:'张三'})
OPTIONAL MATCH (n)-[r]-()
DELETE n,r
或
MATCH (n学习` {name:'张三'}) DETACH DELETE n
MATCH
match关键字相当于sql的select
# 相当于select *
MATCH (n)
RETURN n
导入导出
- 导出
- 导入