教程目录 引自:https://neo4j.com/docs/getting-started/cypher/
模式
Neo4j 的属性图由节点和关系组成,它们都可以具有属性。节点表示实体,例如概念、事件、地点和事物。关系连接成对的节点。
但是,节点和关系可以被认为是低级构建块。属性图的真正优势在于它能够编码连接的节点和关系的模式。单个节点或关系通常编码的信息很少,但是节点和关系的模式可以编码任意复杂的想法。
Cypher®(Neo4j 的查询语言)强烈基于模式。具体来说,模式用于匹配所需的图结构。一旦找到或创建了匹配的结构,Neo4j 就可以使用它进行进一步处理。
一个简单的模式(只有一个关系)连接一对节点(或者,偶尔,一个节点连接到自身)。例如,一个人 LIVES_IN
一个城市,或者一个城市是 PART_OF
一个国家。
使用多个关系的复杂模式可以表达任意复杂的概念,并支持各种有趣的用例。例如,我们可能想要匹配一个人 LIVES_IN
一个国家的实例。以下 Cypher 代码将两个简单的模式组合成一个稍微复杂的模式,该模式执行此匹配:
(:Person) -[:LIVES_IN]-> (:City) -[:PART_OF]-> (:Country)
由图标和箭头组成的图通常用于可视化图。文本注释提供标签,定义属性等。
节点语法
Cypher 使用一对括号来表示一个节点:()
。这让人联想到一个圆形或一个带有圆形端盖的矩形。以下是一些节点的示例,提供了不同类型和数量的详细信息:
()
(matrix)
(:Movie)
(matrix:Movie)
(matrix:Movie {title: 'The Matrix'})
(matrix:Movie {title: 'The Matrix', released: 1997})
最简单的形式 ()
表示一个匿名的、未表征的节点。如果我们要稍后引用该节点,我们可以添加一个变量,例如:(matrix)
。变量仅限于单个语句。它在另一个语句中可能具有不同的含义或没有意义。
:Movie
模式声明节点的标签。这允许我们限制模式,防止它匹配(例如)此位置具有 Actor
节点的结构。
节点的属性(例如 title
)表示为键值对的列表,括在一对大括号内,例如:{name: 'Keanu Reeves'}
。属性可用于存储信息和/或限制模式。
关系语法
Cypher 使用一对破折号 (--
) 来表示无向关系。有向关系在一端有一个箭头 (<--
,-->
)。带括号的表达式 ([...]
) 可用于添加详细信息。这可能包括变量、属性和类型信息:
-->
-[role]->
-[:ACTED_IN]->
-[role:ACTED_IN]->
-[role:ACTED_IN {roles: ['Neo']}]->
在关系的括号对中找到的语法和语义与节点括号之间使用的语法和语义非常相似。可以定义一个变量(例如,role
),以便在语句中的其他地方使用。关系类型(例如,:ACTED_IN
)类似于节点的标签。属性(例如,roles
)与节点属性完全等效。
模式语法
结合节点和关系的语法,我们可以表达模式。以下可能是此域中的一个简单模式(或事实):
(keanu:Person:Actor {name: 'Keanu Reeves'})-[role:ACTED_IN {roles: ['Neo']}]->(matrix:Movie {title: 'The Matrix'})
与节点标签等效,:ACTED_IN
模式声明关系的类型。变量(例如,role
)可以在语句中的其他地方使用以引用该关系。
与节点属性一样,关系属性表示为括在一对大括号内的键/值对的列表,例如:{roles: ['Neo']}
。在这种情况下,我们对角色使用了数组属性,允许指定多个角色。属性可用于存储信息和/或限制模式。
模式变量
为了提高模块化并减少重复,Cypher 允许将模式分配给变量。这允许检查匹配的路径,在其他表达式中使用等。
acted_in = (:Person)-[:ACTED_IN]->(:Movie)
acted_in
变量将包含每个找到或创建的路径的两个节点和连接关系。有许多函数可以访问路径的详细信息,例如:nodes(path)
、relationships(path)
和 length(path)
。
子句
Cypher 语句通常具有多个子句,每个子句执行一个特定任务,例如:
- 在图中创建和匹配模式
- 过滤、投影、排序或分页结果
- 组成部分语句
通过组合 Cypher 子句,您可以组成复杂的语句,表达您想要知道或创建的内容。
有关 Cypher 子句及其使用的详细信息,请参阅 [Cypher 手册 → 子句](链接到 Cypher 手册 → 子句)。
您还可以访问 [Cypher 速查表](链接到 Cypher 速查表) 以快速参考 Cypher 语法。