Neo4j 基础教程
Neo4j 第一篇:在Windows环境中安装Neo4j
一. 安装Neo4j 前,需要安装 JDK
二. 配置Neo4j
访问协议有: Bolt(7687) , HTTP(7474) , HTTPS(7473)
默认只允许本地访问,如果需要允许远程主机访问,需要设置这个属性为 0.0.0.0,且设置防火墙允许对应端口访问:
dbms.connectors.default_listen_address=0.0.0.0
三. 启动Neo4j
启动命令:neo4j.bat console
启动服务,停止服务,重启服务和查询服务的状态:
bin\neo4j start
bin\neo4j stop
bin\neo4j restart
bin\neo4j status
四. Neo4j 集成浏览器
浏览器打开 “http://localhost:7474/” 默认的用户是neo4j,默认的密码是:neo4j,第一次成功connect到Neo4j服务器之后,需要重置密码。
Neo4j 第二篇:图形数据库
图的基本概念:一个属性图是有向图,由顶点(Vertex),边(Edge),标签(Lable),关系类型(Relationship Type)和属性(Property)组成。
一. 基本概念
实体(Entity)是指节点(Node)和关系(Relationship);
路径(Path)是指由起始节点和终止节点之间的实体(节点和关系)构成的有序组合;
标记(Token)是非空的字符串,用于表示 标签(Lable)、关系类型(Relationship Type)、或属性键(Property Key);
标签(Label):用于对节点进行分组,多个节点可以有相同的标签,一个节点可以有多个标签,拥有相同标签的节点属于同一个分组;
关系类型(Relationship Type):用于表示关系的类型,多个关系可以有相同的关系类型,但是一个关系仅有一个关系类型;
属性键:用于唯一标识一个属性,在一个关系或节点中,属性键是唯一的;
属性(Property)是一个键值对(Key/Value Pair),每个节点或关系可以有一个或多个属性;属性值可以是标量类型(Boolean、Integer、Float、String)、或组合类型(List,Map);
Neo4j 第三篇:Cypher查询入门
一. 基本知识
和SQL很相似,Cypher语言的关键字不区分大小写,但是属性值,标签,关系类型和变量是区分大小写的。
1. 变量(区分大小写)
如:【 MATCH (n)-->(b) RETURN b 】 n , b 就是变量
2. 访问属性
格式是:Variable.PropertyKey
match (n)-->(b) where id(n)=5 and b.age=18 return b;
二. 创建节点
节点模式的构成:(Variable:Lable1:Lable2{Key1:Value1,Key2,Value2})
如:【create (n:Person { name:'Tom Hanks', born:1956})returnn;】
三. 查询节点
通过match子句查询数据库
1. 查询整个图形数据库
match(n) returnn;
2. 根据属性查询
match(n) where n.born < 1955 return n;
3. 查询具有指定Lable的节点
match(n:Movie) return n;
4. 查询具有指定属性的节点
match(n{name:'Tom Hanks'}) return n;
四. 创建关系
关系的构成:StartNode - [Variable:RelationshipType{Key1:Value1,Key2:Value2}] -> EndNode,在创建关系时,必须指定关系类型。
1,创建没有任何属性的关系
MATCH (a:Person),(b:Movie)
WHERE a.name ='Robert Zemeckis' AND b.title ='Forrest Gump'CREATE (a) -[r:DIRECTED]-> (b)
RETURN r;
2,创建关系,并设置关系的属性
MATCH (a:Person),(b:Movie)
WHERE a.name ='Tom Hanks'AND b.title ='Forrest Gump'CREATE (a)-[r:ACTED_IN { roles:['Forrest'] }]->(b)
RETURN r;
五. 查询关系
在Cypher中,关系分为三种:符号“--”,表示有关系,忽略关系的类型和方向;符号“-->”和“<--”,表示有方向的关系;
1,查询整个数据图形
match(n) return n;
2,查询跟指定节点有关系的节点
match(n) -- (m:Movice)
return n;
3,查询有向关系的节点
MATCH (:Person { name:'Tom Hanks'})-->(movie)
RETURN movie;
4,为关系命名,通过[r]为关系定义一个变量名,通过函数type获取关系的类型
MATCH (:Person { name:'Tom Hanks'})-[r]->(movie)
RETURN r,type(r);
5. 询特定的关系类型,通过[Variable:RelationshipType{Key:Value}]指定关系的类型和属性
MATCH (:Person { name:'Tom Hanks'})-[r:ACTED_IN{roles:'Forrest'}]->(movie)
RETURN r,type(r);
六. 更新图形
1,创建一个完整的Path
CREATE p =(vic:Worker:Person{ name:'vic',title:"Developer"})-[:WORKS_AT]->(neo)<-[:WORKS_AT]-(michael:Worker:Person { name:'Michael',title:"Manager" })
RETURN p
2,为节点增加属性
match (n)
where id(n)=7
set n.name ='neo'
return n;
3,为节点增加标签
match (n)
where id(n)=7
set n:Company
return n;
4,为关系增加属性
match (n)<-[r]-(m)
where id(n)=7 and id(m)=8
se tr.team='Azure'
return n;
七. 跟实体相关的函数
1,通过id函数,返回节点或关系的ID
MATCH (:Person { name: 'Oliver Stone' })-[r]->(movie)
RETURN id(r);
2,通过type函数,查询关系的类型
MATCH (:Person { name:'Oliver Stone'})-[r]->(movie)
RETURN type(r);
3,通过lables函数,查询节点的标签
MATCH (:Person { name:'Oliver Stone'})-[r]->(movie)
RETURN lables(movie);
4,通过keys函数,查看节点或关系的属性键
MATCH (a)
WHERE a.name ='Alice'RETURN keys(a)
5,通过properties()函数,查看节点或关系的属性
CREATE (p:Person { name:'Stefan', city:'Berlin' })
RETURN properties(p)
八. 路径查询
变长路径的模式
从一个节点,通过直接关系,连接到另外一个节点,这个过程叫遍历,经过的节点和关系的组合叫做路径(Path),路径是由节点和关系的有序组合。
(a)-->(b):是步长为1的路径,节点a和b之间有关系直接关联;
(a)-->()-->(b):是步长为2的路径,从节点a,经过两个关系和一个节点,到达节点b;
Cypher语言支持变长路径的模式,变长路径的表示方式是:[*N..M],N和M表示路径长度的最小值和最大值。
(a)-[*2]->(b):表示路径长度为2,起始节点是a,终止节点是b;
(a)-[*3..5]->(b):表示路径长度的最小值是3,最大值是5,起始节点是a,终止节点是b;
(a)-[*..5]->(b):表示路径长度的最大值是5,起始节点是a,终止节点是b;
(a)-[*3..]->(b):表示路径长度的最小值是3,起始节点是a,终止节点是b;
(a)-[*]->(b):表示不限制路径长度,起始节点是a,终止节点是b;
路径变量
路径可以指定(assign)给一个变量,该变量是路径变量,用于引用查询路径。
p = (a)-[*3..5]->(b)
例子:
MATCH (me)-[:KNOWS*1..2]-(remote_friend)
WHERE me.name = 'Filipa'
RETURN remote_friend.name
Neo4j 第四篇:使用.NET驱动访问Neo4j
Neo4j 第五篇:批量更新数据
Neo4j 第六篇:Cypher语法
Neo4j 第七篇:模式(Pattern)
关系匹配
Neo4j 第八篇:投射和过滤
一,Return子句
二,with 子句
三,unwind子句
四,Where子句
五,排序
六,SKIP和LIMIT
Neo4j 第九篇:查询数据(Match)
一,节点查询
match 的基本使用
二,基本关系的查询
1,指定关系的方向来查询节点
2,查询关系的类型
3,匹配关系类型
3,匹配多种关系类型
4,匹配关系类型,并指定关系变量
5,匹配多个关系
三,匹配路径
1,对变长路径的查询
2,路径变量
3,根据路径的属性进行匹配
Neo4j 第十篇:更新数据
一,创建节点
1,创建空的节点
CREATE (n)
CREATE (a),(b)
2,创建带标签的节点
CREATE (n:Person)
CREATE (n:Person:Swedish)
3,创建带标签和属性的节点
CREATE (n:Person { name:'Andres', title:'Developer'})
二,创建关系
创建节点之前的关系
1,在两个节点之间创建关系
在两个节点之间创建关系,并设置关系类型
MATCH (a:Person),(b:Person)
WHERE a.name ='A'AND b.name ='B'CREATE (a)-[r:RELTYPE]->(b)
RETURN type(r)
2,创建关系,并设置关系的属性
MATCH (a:Person),(b:Person)
WHERE a.name ='A'AND b.name ='B'CREATE (a)-[r:RELTYPE { name: a.name +'<->'+ b.name }]->(b)
RETURN type(r), r.name
3,CREATE子句和模式
在CREATE子句和模式中,对于模式中的任意部分,如果它不存在于图中,那么CREATE子句创建它;如果存在于图中,那么就会引用它。
CREATE p =(andres { name:'Andres'})-[:WORKS_AT]->(neo)<-[:WORKS_AT]-(michael { name:'Michael' })
RETURN p
三,删除节点和关系
使用delete子句删除节点、关系和路径,当删除节点时,该节点必须是孤立的节点,也就是说,必须首先删除跟节点相关的所有关系。
detach delete: 表示删除一个节点或多个节点,跟节点相关的所有关系也都被删除。
1,删除节点
MATCH (n:Person { name:'UNKNOWN' })
DELETE n
2,删除所有节点和关系
MATCH (n)
DETACH DELETE n
3,删除一个节点和它的所有关系
MATCH (n { name:'Andres' })
DETACH DELETE n
4,删除关系
MATCH (n { name:'Andres'})-[r:KNOWS]->()
DELETE r
四,更新属性或标签
set子句用于更新节点的标签,向节点和关系中添加属性
1,向节点或关系中添加属性
MATCH (n { name:'Andres' })
SET n.surname ='Taylor'RETURN n.name, n.surname
2,移除属性
如果设置属性的值是NULL,相当于把该属性从节点或关系中移除
MATCH (n { name:'Andres' })
SET n.name = NULL RETURN n.name, n.age
3,复制属性
把一个节点的属性复制给另一个节点
MATCH (at { name:'Andres'}),(pn { name:'Peter' })
SET at = pn
RETURN at.name, at.age, at.hungry, pn.name, pn.age
4,从Map中添加属性
MATCH (p { name:'Peter' })
SET p += { hungry: TRUE , position:'Entrepreneur'}
5,在一条set子句中添加多个属性
MATCH (n { name:'Andres' })
SET n.position ='Developer', n.surname ='Taylor'
6,向节点中添加标签
MATCH (n { name:'Stefan' })
SET n:German
RETURN n.name, labels(n) AS labels
7,向节点中添加多个标签
MATCH (n { name:'Emil' })
SET n:Swedish:Bossman
RETURN n.name, labels(n) AS labels
五,移除属性
使用remove子句从节点中移除标签和属性,从关系中移除属性。
1,移除属性
默认情况下,Neo4j不允许存在值为null的属性;如果属性不存在,那么返回该属性的值是null。
MATCH (a { name:'Andres' })
REMOVE a.age
RETURN a.name, a.age
2,移除节点的标签
MATCH (n { name:'Peter' })
REMOVE n:German
RETURN n.name, labels(n)
3,移除节点的多个标签
当节点的标签为空时,labels(n)函数返回空的list
MATCH (n { name:'Peter' })
REMOVE n:German:Swedish
RETURN n.name, labels(n)
六,foreach子句
列表和路径是Cypher中的关键概念,foreach子句用于更新数据,例如,对路径中的元素或通过聚合创建的列表执行更新命令。
1,对路径中的元素执行更新命令
对路径中匹配的所有节点,添加marked属性,并设置属性值为TRUE
MATCH p =(begin)-[*]->(END )
WHERE begin.name = 'A' AND END .name = 'D'
FOREACH (n IN nodes(p)| SET n.marked = TRUE )
Neo4j 第十一篇:Cypher函数
Neo4j 第十二篇:使用Python驱动访问Neo4j