运算符

本页概述了 Cypher® 中可用的运算符。运算符是专门的执行模块,负责在查询执行计划中对数据进行某种类型的转换,然后将其传递给下一个运算符,直到匹配到所需的图模式。

有关如何理解执行计划(以及运算符在其中扮演的角色)的信息,请参见理解执行计划

有关每个运算符的更多信息,请参见运算符详解

运算符摘要

此表包含按字典顺序排列的所有执行计划运算符。

  • 在大多数情况下,运算符用于定位执行查询所需的起始节点和关系。

  • 更新运算符用于更新图的查询中。

  • 急切运算符在将其行传递给下一个运算符之前累积所有行

名称 描述 叶子? 更新? 注意事项

从节点存储中读取所有节点。

测试是否存在模式。

执行嵌套循环。测试是否存在模式谓词。

执行嵌套循环。生成来自左侧和右侧运算符的行。

指示用作 Apply 运算符右侧参数的变量。

用于确保逐行语义。限制 Cypher 运行时不将操作批量处理为更大的块。

确保没有节点属性唯一性约束被违反。

确保没有关系属性唯一性约束被违反。

在 5.8 中引入

用于确保没有属性唯一性约束被违反。

读取节点或关系属性并缓存它们。

生成左侧和右侧运算符输入的笛卡尔积。

创建节点和关系。

为节点或关系创建索引。

为节点或关系创建约束。

删除节点或关系。

删除节点及其关系。

获取数据库中的所有关系及其起始节点和结束节点。

通过元素 ID(通过函数 elementId() 指定)从关系存储中读取一个或多个关系,并生成该关系以及关系的源节点和目标节点。

通过 ID(通过函数 Id() 指定)从关系存储中读取一个或多个关系,并生成该关系以及关系的源节点和目标节点。

检查索引中存储的所有值,搜索包含特定 STRING 的条目;例如,在包含 CONTAINS 的查询中。

检查索引中存储的所有值,搜索以特定 STRING 结尾的条目;例如,在包含 ENDS WITH 的查询中。

检查索引中存储的所有值,返回所有具有特定关系类型和指定属性的关系及其起始节点和结束节点。

使用索引查找关系及其起始节点和结束节点。

使用索引查找关系及其起始节点和结束节点,其中属性值与给定的前缀 STRING 匹配。

从关系类型索引中获取所有具有特定类型的关系及其起始节点和结束节点。

从关系类型索引中获取所有至少具有所提供类型之一的关系及其起始节点和结束节点。

从传入的行流中删除重复行。

Eager

检查约束是否已存在,如果存在则停止执行,否则继续。

检查索引是否已存在,如果存在则停止执行,否则继续。

使用其名称删除约束。

使用其名称删除索引。

出于隔离目的,Eager 确保影响后续操作的操作在继续执行之前完全针对整个数据集执行。

Eager

评估分组表达式。

Eager

急切地加载所有传入数据并丢弃它们。

Eager

返回一个不带任何列的单行。

ExhaustiveLimit 运算符类似于 Limit 运算符,但总是耗尽输入。在组合使用 LIMIT 和更新时使用。

遍历给定节点的传入或传出关系。

查找两个节点之间的所有关系。

过滤来自子运算符的每一行,只通过将谓词评估为 true 的行。

执行嵌套循环。生成左侧运算符的行,并丢弃右侧运算符的行。

从节点标签索引中获取具有所有提供的标签的所有节点。

在 5.5 中引入

执行嵌套循环。测试包含多个模式谓词的查询中是否存在模式谓词。

执行嵌套循环。测试与其它谓词组合的模式谓词是否存在。

执行嵌套循环。测试与其它谓词组合的模式谓词是否存在。

执行嵌套循环。测试包含多个模式谓词的查询中是否存在模式谓词。

从传入输入中返回前 n 行。

将数据从 CSV 源加载到查询中。

类似于 Merge 运算符,但在必要时创建关系时会锁定起始节点和结束节点。

Merge 运算符将读取或创建节点和/或关系。

使用多个索引查找节点。

通过节点存储中的 ID(通过函数 elementId() 指定)读取一个或多个节点。

在 5.3 中引入

通过节点存储中的 ID(通过函数 id() 指定)读取一个或多个节点。

从节点标签索引中获取所有具有特定标签的节点。

使用计数存储来回答有关节点计数的问题。

在节点 ID 上执行哈希连接。

Eager

检查索引中存储的所有值,搜索包含特定 STRING 的条目。

检查索引中存储的所有值,搜索以特定 STRING 结尾的条目。

检查索引中存储的所有值,返回所有具有特定标签和指定属性的节点。

使用索引查找节点。

使用索引查找节点,其中属性值与给定的前缀 STRING 匹配。

执行左外哈希连接。

Eager

执行右外哈希连接。

Eager

在唯一索引中使用索引查找节点。

在唯一索引中使用索引查找节点,其中属性值与给定的前缀 STRING 匹配。

负责清理 Repeat(Trail) 产生的状态。它只在 Repeat(Trail) 之后直接计划。

在 5.9 中引入

如果其源没有返回数据,则生成一个所有列都设置为 null 的单行。

遍历给定节点的关系,如果谓词未满足,则生成一行,并将关系和结束节点设置为 null

遍历两个节点之间的所有关系,如果没有找到匹配关系(起始节点是度数最小的节点),则生成一行,并将关系和结束节点设置为 null

类似于 EagerAggregation 运算符,但依赖于传入行的顺序。它不是急切的。

类似于 DISTINCT 运算符,但依赖于传入行的顺序。

如果已经存在排序,则按多列对行进行排序。

如果已经存在排序,则返回按多列排序的前 n 行。

由并行运行时用于从节点存储中读取所有节点。

在 5.17 中引入

由并行运行时用于从数据库中获取所有关系及其起始节点和结束节点。

在 5.17 中引入

由并行运行时用于检查索引中存储的所有值。它返回所有具有特定类型和指定属性的关系,以及它们的起始节点和结束节点。

在 5.17 中引入

使用并行索引查找关系及其起始节点和结束节点。

在 5.17 中引入

使用并行索引查找关系,其中指定关系类型属性的值在给定范围内。它还查找这些关系的起始节点和结束节点。

在 5.17 中引入

使用并行扫描从关系类型索引中获取所有具有特定类型的关系。它还获取这些关系的起始节点和结束节点。

在 5.17 中引入

使用并行扫描从关系类型索引中获取所有至少具有所提供类型之一的关系。它还获取这些关系的起始节点和结束节点。

在 5.17 中引入

由并行运行时用于从节点标签索引中获取所有具有特定标签的节点。

在 5.17 中引入

由并行运行时用于检查索引中存储的所有值,返回所有具有特定标签和指定属性的节点。

在 5.17 中引入

由并行运行时用于使用索引查找节点。

在 5.17 中引入

使用并行索引查找节点,其中指定属性的值在给定范围内。

在 5.17 中引入

由并行运行时用于从节点标签索引中获取所有具有第一组提供的标签但没有第二组提供的标签的节点。

在 5.21 中引入

由并行运行时用于从数据库中获取所有关系及其起始节点和结束节点。

在 5.17 中引入

由并行运行时用于检查索引中存储的所有值,返回所有具有特定关系类型和指定属性的关系。它还返回这些关系的起始节点和结束节点。

在 5.17 中引入

使用并行索引查找关系及其起始节点和结束节点。

在 5.17 中引入

使用并行索引查找关系,其中指定关系属性类型的值在给定范围内。它还查找这些关系的起始节点和结束节点。

在 5.17 中引入

由并行运行时用于从关系类型索引中获取所有具有特定类型的关系。它还获取这些关系的起始节点和结束节点。

在 5.17 中引入

由并行运行时用于从关系类型索引中获取所有至少具有所提供类型之一的关系。它还获取这些关系的起始节点和结束节点。

在 5.17 中引入

由并行运行时用于从节点标签索引中获取所有至少具有所提供标签之一的节点。

在 5.17 中引入

由并行运行时用于返回列表中每个项目一行。

在 5.17 中引入

调用过程。

准备结果以便用户可以消费。

投射关系的起始节点和结束节点。

评估一组表达式,生成包含结果的行。

使用计数存储来回答有关关系计数的问题。

解决量化路径模式。

在 5.9 中引入

从节点中删除标签。

执行嵌套循环。执行模式表达式或模式理解。

执行嵌套循环。如果表达式谓词评估为 false,则测试是否存在模式谓词。

执行嵌套循环。如果表达式谓词评估为 false,则测试是否存在模式谓词。

执行嵌套循环。测试是否存在模式谓词。

在节点上设置标签。

从映射在节点上设置属性。

在节点或关系上设置属性。

在节点或关系上设置多个属性时使用。

从映射在关系上设置属性。

查找两个先前匹配的节点变量之间的一条或所有最短路径。

列出可用的约束。

列出可用的函数。

列出可用的索引。

列出可用的过程。

列出可用的配置设置。

列出当前服务器上可用的事务。

从传入行中跳过 n 行。

按提供的键对行进行排序。

Eager

查找从先前匹配的节点变量到未先前匹配的端点的最短路径。

在 5.21 中引入

查找两个先前匹配的节点变量之间的最短路径。它使用双向广度优先搜索 (BFS) 算法,该算法同时执行两次 BFS 调用,一次从左边界节点,一次从右边界节点。

在 5.21 中引入

作用类似于 Foreach 运算符,但仅用于执行子查询。

从节点标签索引中获取所有具有第一组提供的标签但没有第二组提供的标签的节点。

在 5.21 中引入

终止具有给定 ID 的事务。

Top

返回按提供的键排序的前 'n' 行。

Eager

作用类似于 Apply 运算符,但在指定行数后将提交当前事务。

作用类似于 Foreach 运算符,但在指定行数后将提交当前事务。

TriadicFilter 结合使用以解决三角查询。

TriadicBuild 结合使用以解决三角查询。

解决三角查询,例如非常常见的“查找我朋友的朋友中还不是我朋友的人”。

获取数据库中的所有关系及其起始节点和结束节点。

通过元素 ID(通过函数 ElementId() 指定)从关系存储中读取一个或多个关系。由于方向未指定,因此通过交替组合起始节点和结束节点,每个关系会生成两行。

通过 ID(通过函数 Id() 指定)从关系存储中读取一个或多个关系。由于方向未指定,因此通过交替组合起始节点和结束节点,每个关系会生成两行。

检查索引中存储的所有值,搜索包含特定 STRING 的条目;例如,在包含 CONTAINS 的查询中。

检查索引中存储的所有值,搜索以特定 STRING 结尾的条目;例如,在包含 ENDS WITH 的查询中。

检查索引中存储的所有值,返回所有具有特定关系类型和指定属性的关系及其起始节点和结束节点。

使用索引查找关系及其起始节点和结束节点。

使用索引查找关系及其起始节点和结束节点,其中属性值与给定的前缀 STRING 匹配。

从关系类型索引中获取所有具有特定类型的关系及其起始节点和结束节点。

从关系类型索引中获取所有至少具有所提供类型之一的关系及其起始节点和结束节点。

将右侧运算符的结果与左侧运算符的结果连接起来。

从节点标签索引中获取所有至少具有所提供标签之一的节点。

返回列表中每个项目一行。

在任意值上执行哈希连接。

Eager

遍历给定节点的可变长度关系。

查找两个节点之间的所有可变长度关系。

遍历给定节点的可变长度关系,只返回唯一的结束节点。

遍历给定节点的可变长度关系,只返回唯一的结束节点。

数据库命中

每个运算符都会向存储引擎发送请求以执行诸如检索或更新数据等工作。数据库命中 (DBHits) 是此存储引擎工作的一个抽象单位。

以下是所有触发一个或多个数据库命中的操作

  • 创建操作

    • 创建节点。

    • 创建关系。

    • 创建新的节点标签。

    • 创建新的关系类型。

    • 为同名属性键创建新的 ID。

  • 删除操作

    • 删除节点。

    • 删除关系。

  • 更新操作

    • 在一个节点上设置一个或多个标签。

    • 从节点中删除一个或多个标签。

  • 节点特定操作

    • 通过 ID 获取节点。

    • 获取节点的度数。

    • 确定节点是否密集。

    • 确定节点上是否设置了标签。

    • 获取节点的标签。

    • 获取节点的属性。

    • 获取现有节点标签。

    • 通过 ID 获取标签名称,或通过名称获取其 ID。

  • 关系特定操作

    • 通过 ID 获取关系。

    • 获取关系的属性。

    • 获取现有关系类型。

    • 通过 ID 获取关系类型名称,或通过名称获取其 ID。

  • 通用操作

    • 通过 ID 获取属性键的名称,或通过键名称获取其 ID。

    • 通过索引查找或索引扫描查找节点或关系。

    • 在可变长度扩展中查找路径。

    • 查找最短路径。

    • 向计数存储查询值。

  • 模式操作

    • 添加索引。

    • 删除索引。

    • 获取索引的引用。

    • 创建约束。

    • 删除约束。

  • 调用过程。

  • 调用用户定义函数。