Neo4j-7-Pattern

Neo4j 第七篇:模式(Pattern)

转载: https://www.cnblogs.com/ljhdo/p/10913917.html

模式和模式匹配是 Cypher 的核心,使用模式来描述所需数据的形状,该模式使用属性图的结构来描述,通常使用小括号 () 表示节点,–>表示关系,-[]->表示关系和关系的类型,箭头表示关系的方向。

一 节点模式

用小括号表示节点模式:(a),a 是节点变量的名称,用于引用图中的某一个节点 a。

对于匿名的节点,可以使用()来表示,匿名的节点无法引用,通常用来表示路径中的占位节点。

1 标签模式

在节点变量的后面,使用 :Lable 来表示标签,标签是节点的分组,一个节点可以有一个标签,也可以有多个标签,

比如,(a:User),(a:User:Admin)

2 指定属性

节点和关系都有属性,属性模式可以使用Map结构来表示,属性模式的格式是{ key:value,..},使用大括号表示一个字典,包含一个或多个键/值对:

1
2
(a {name: 'Andres', sport: 'Brazilian Ju-Jitsu'})
(a)-[{blocked: false}]->(b)

二 关系模式

关系模式是由节点和路径来描述的,最简单的关系模式两个节点和一个路径:

1
(a)--(b)

该模式表示节点 a 和节点 b 之间存在关系,不指定关系的方向。

1 关系的名称和方向

关系也可以被命名,Cypher 使用 [r] 来表示关系变量:

1
(a)-[r]-(b)

关系是有方向的,使用箭头指定关系的方向:

1
(a)-[r]->(b)

2 关系类型

就像节点具有标签,可以对节点进行分组,关系也可以分组,Neo4j按照关系的类型对关系进行分组

1
(a)-[r:REL_TYPE]->(b)

但是不像节点可以有多个标签,关系只能由一个关系类型,但是,关系的类型可以属于一个集合,这使用 | 来分割,表示关系输入集合中的任意一个类型:

1
(a)-[r:TYPE1|TYPE2]->(b)

三 路径模式

路径是由节点和关系构成的序列,在路径中节点和关系是交替相连的,不可中断。路径的长度是指关系的数量,固定长度的路径是指:路径中关系的数量是固定不变的,可变长度的路径是:指路径中关系的数量是可变的。关系的数量有两种表示方式:固定长度和变长。

固定长度的关系,使用[* n]来表示
变长的关系,使用[*start..end]来表示,其中 ..  表示关系的长度是可变的,start表示关系数量的最小值,end表示关系数量的最大值。

在变长关系模式中,也可以指定关系的类型:[Type * start .. end ],变长关系只能用于 MATCH 查询语句中,不能用于 CREATE 和 MERGE 语句中。

1 固定长度的关系

在关系 [] 中,使用 *2 表示关系的长度为 2 ,使用该模式来表示路径,路径两端的节点是 a 和 b ,路径中间的节点是匿名的,无法通过变量来引用。

1
(a)-[*2]->(b)

该模式描述了 3 个节点和 2 个关系,路径两端的节点是 a 和 b,中间节点是匿名节点,等价于以下的模式:

1
(a)-->()-->(b)

2 变长关系

在关系 [] 中,使用 [*start .. end] 来表示变长关系

1
2
3
4
(a)-[*3..5]->(b)
(a)-[*3..]->(b)
(a)-[*..5]->(b)
(a)-[*]->(b)

3 路径变量

Cypher 允许对 Path 命名,把 Path 赋值给变量 p,路径模式可以使用p来表示:

1
p = (a)-[*3..5]->(b)

4 举个例子

有如下的有向图数据,按照有向图来计算路径,最长的路径长度是 2;按照无向图来计算路径,最长的路径长度是 6。

分析以下 Cypher 查询,在路径模式中,路径是无向的,路径的长度是 1 或 2,关系的类型是 KNOWS,节点 Filipa 和节点 remote_friend 在同一条路径中,

1
2
3
MATCH (me)-[:KNOWS*1..2]-(remote_friend)
WHERE me.name = 'Filipa'
RETURN remote_friend.name
Contents
  1. 1. Neo4j 第七篇:模式(Pattern)
    1. 1.1. 一 节点模式
      1. 1.1.1. 1 标签模式
      2. 1.1.2. 2 指定属性
    2. 1.2. 二 关系模式
      1. 1.2.1. 1 关系的名称和方向
      2. 1.2.2. 2 关系类型
    3. 1.3. 三 路径模式
      1. 1.3.1. 1 固定长度的关系
      2. 1.3.2. 2 变长关系
      3. 1.3.3. 3 路径变量
      4. 1.3.4. 4 举个例子
|