Cypher是什么,Cypher数据库语言简介
Neo4j 使用的图数据库语言是 Cypher。Cypher 是描述性的图数据库查询语言,具有语法简单、功能强大的特点。
由于 Neo4j 在图数据库中的应用较多,因此 Cypher 成为图数据库查询语言的事实标准。
在使用模式时,用户描述所需数据的形状,即模式,Cypher 会根据模式的形状返回对应的数据。
匿名节点可以使用如下表示形式:
在 Neo4j 中,关系是有方向的,这里仅匹配从节点 a 到节点 b 的模式。这种描述节点和节点间关系的模式可以扩展到任意数量的节点以及它们之间的关系,例如:
一个节点可以有多个标签,例如:
如果不关心关系的方向性,则箭头可以省略,如下方的代码所示:
与节点一样,关系也可以被命名。在关系中,使用 -[]-> 表示关系、关系类型以及关系的方向性。关系变量可以放置在 [] 中间,代码如下:
关系变量中也可以针对关系添加标签,代码如下:
关系的标签只能有一个,这与节点有所不同。但是,关系的类型可以属于一个集合,使用“|”进行分割,以表示关系输入集合中的某些类型,代码如下:
根据长度不同,路径可分为固定长度的路径和可变长度的路径:
路径的固定长度用 [*n] 表示,其中,n 表示固定的关系数量。举例如下:
路径的可变长度用 [*start..end] 表示,其中,“…”表示关系的长度是可变的,start 表示关系数量的最小值,end 表示关系数量的最大值。
需要注意的是,在可变长度的表示中,start 和 end 均可省略,如果省略 start,那么关系的数量为小于或等于最大值 end;如果省略 end,那么关系的数量大于或等于最小值 start;如果同时省略 start 和 end,那么关系的数量是任意的。举例如下:
例如把路径赋值给变量 p,代码如下:
由于 Neo4j 在图数据库中的应用较多,因此 Cypher 成为图数据库查询语言的事实标准。
Cypher的模式
模式由节点和关系组成,可以表示遍历和路径。模式和模式匹配是 Cypher 的核心,模式使用属性图的结构进行描述,通常使用 () 表示节点、--> 表示关系、-[]-> 表示关系和关系的类型,其中,箭头表示关系的方向。在使用模式时,用户描述所需数据的形状,即模式,Cypher 会根据模式的形状返回对应的数据。
1) 节点模式
节点是模式中描述得最简单的形状,使用一对小括号即可,代码如下。(a)其中,a 表示节点的名称或别名,用于引用图中的某一个节点。
匿名节点可以使用如下表示形式:
()需要注意的是,匿名节点无法被引用。
2) 节点关系模式
描述多个节点以及它们之间关系的模式尤为有用。在 Cypher 中,两个节点之间的关系使用箭头来描述,代码如下:(a)-->(b)上面的节点关系模式描述了一个非常简单的数据形状:两个节点(a 和 b),以及节点 a 到节点 b 的单一关系。
在 Neo4j 中,关系是有方向的,这里仅匹配从节点 a 到节点 b 的模式。这种描述节点和节点间关系的模式可以扩展到任意数量的节点以及它们之间的关系,例如:
(a)-->(b)<--(c)上述代码所示的这一系列相连的节点和关系也被称为路径。
3) 标签模式
模式除了描述节点的形状外,还可以描述属性。最简单的描述属性的模式是标签模式,例如:(a:User)-->(b)
其中,User 表示节点 a 的标签。一个节点可以有多个标签,例如:
(a:User:Admin)-->(b)
4) 指定属性
属性可以使用 Map 映射表示。描述一个有两个属性的节点的代码如下:(a {name: 'Andy', sport: 'Brazilian Ju-Jitsu'})在上述代码中,a 表示节点,大括号中的键值对表示节点 a 的属性,其中的 name 参数和 sport 参数表示属性的键,Andy 和 Brazilian Ju-Jitsu 表示属性键对应的值。
5) 关系模式
最简单的描述关系的方法是在两个节点之间使用箭头-->,箭头表示方向性,如下面的代码所示:(a)-->(b)
如果不关心关系的方向性,则箭头可以省略,如下方的代码所示:
(a)--(b)
与节点一样,关系也可以被命名。在关系中,使用 -[]-> 表示关系、关系类型以及关系的方向性。关系变量可以放置在 [] 中间,代码如下:
(a) - [r] -> (b)
关系变量中也可以针对关系添加标签,代码如下:
(a) - [r:REL_TYPE] -> (b)
关系的标签只能有一个,这与节点有所不同。但是,关系的类型可以属于一个集合,使用“|”进行分割,以表示关系输入集合中的某些类型,代码如下:
(a) - [r:TYPE1|TYPE2] -> (b)
6) 路径模式
路径是由节点和关系构成的序列,路径的长度是节点之间的关系数量。根据长度不同,路径可分为固定长度的路径和可变长度的路径:
- 在固定长度的路径中,路径中关系的数量是不变的;
- 在可变长度的路径中,路径中关系的数量是可变的。
路径的固定长度用 [*n] 表示,其中,n 表示固定的关系数量。举例如下:
(a) - [*2] -> (b) //等价于下面的写法 (a)-->()-->(b)在上述示例中,*2 表示关系的数量为 2,路径两端的节点是 a 和 b,关系方向由节点 a 指向节点 b,两个节点中间存在一个无法被引用的匿名节点。
路径的可变长度用 [*start..end] 表示,其中,“…”表示关系的长度是可变的,start 表示关系数量的最小值,end 表示关系数量的最大值。
需要注意的是,在可变长度的表示中,start 和 end 均可省略,如果省略 start,那么关系的数量为小于或等于最大值 end;如果省略 end,那么关系的数量大于或等于最小值 start;如果同时省略 start 和 end,那么关系的数量是任意的。举例如下:
(a) - [*3..5] -> (b) (a) - [*3..] -> (b) (a) - [*..5] -> (b) (a) - [*] -> (b)路径模式中还有一个路径变量的概念,该变量的作用对路径命名。
例如把路径赋值给变量 p,代码如下:
p = (a) - [*3..5] -> (b)