运算符

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

有关如何理解执行计划(以及运算符在其中的作用)的信息,请参阅 理解执行计划

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

运算符摘要

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

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

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

  • 急切 (Eager) 运算符会 累积所有行,然后再将它们传输给下一个运算符。

名称 描述 是否叶子节点? 是否更新? 注意事项

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

测试模式是否存在缺失。

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

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

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

用于确保逐行语义。限制 Cypher 运行时 不将操作分组成较大的块。

确保不违反节点属性唯一性约束。

确保不违反关系属性唯一性约束。

用于确保不违反属性唯一性约束。

读取节点或关系属性并将其缓存。

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

创建节点和关系。

为节点或关系创建索引。

为节点或关系创建约束。

删除节点或关系。

删除一个节点及其关系。

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

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

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

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

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

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

使用索引查找来查找关系及其起始和终止节点。

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

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

通过执行相似性搜索从索引中查找关系。

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

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

Eager

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

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

使用名称删除约束。

使用名称删除索引。

允许 Cypher 在规划使用动态节点标签的查询时使用令牌查找索引。

引入于 Neo4j 2025.08

允许 Cypher 在规划在有向关系模式中使用动态关系类型的查询时使用令牌查找索引。

引入于 Neo4j 2025.08

允许 Cypher 在规划在无向关系模式中使用动态关系类型的查询时使用令牌查找索引。

引入于 Neo4j 2025.08

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

Eager

评估分组表达式。

Eager

急切地加载所有传入数据并将其丢弃。

Eager

返回一行且无列的记录。

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

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

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

过滤来自子运算符的每一行,仅传递谓词评估结果为 true 的行。

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

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

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

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

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

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

返回输入数据中的前 n 行。

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

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

有时与 LockingMerge 运算符结合使用以锁定节点。

引入于 Neo4j 2025.09

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

类似于 Merge 运算符,但用于模式的起始和终止节点在 MERGE 模式之外被匹配的情况。

引入于 Neo4j 2025.11

类似于 Merge 运算符,但用于 MERGE 语句中使用的属性存在属性唯一性约束的情况。

引入于 Neo4j 2026.02

使用多次索引查找来查找节点。

根据函数 elementId() 指定的 ID,从节点存储中读取一个或多个节点。

根据函数 id() 指定的 ID,从节点存储中读取一个或多个节点。

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

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

对节点 ID 执行哈希连接。

Eager

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

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

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

使用索引查找来查找节点。

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

执行左外哈希连接。

Eager

执行右外哈希连接。

Eager

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

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

通过执行相似性搜索从索引中查找节点。

负责清理 Repeat 产生的状态。它仅在 Repeat 之后立即规划。

如果源不返回数据,则生成一行且所有列均设置为 null

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

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

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

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

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

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

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

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

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

使用并行索引查找来查找关系及其起始和终止节点。

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

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

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

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

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

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

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

由并行运行时使用,从节点标签索引中获取所有具有第一组提供标签且不具有第二组提供标签的节点。

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

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

使用并行索引查找来查找关系及其起始和终止节点。

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

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

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

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

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

调用存储过程。

准备结果以供用户使用。

投影出关系的起始节点和终止节点。

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

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

求解量化路径模式。

从节点中删除标签。

执行嵌套循环。执行模式表达式或模式推导。

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

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

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

在节点上设置标签。

从映射中为节点设置属性。

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

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

从映射中为关系设置属性。

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

列出可用的约束。

列出可用的函数。

列出可用的索引。

列出可用的过程。

列出可用的配置设置。

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

跳过传入行中的 n 行。

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

Eager

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

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

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

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

终止具有给定 ID 的事务。

Top

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

Eager

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

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

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

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

求解三角形查询,例如非常常见的“查找并非我好友的朋友的朋友”。

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

根据函数 ElementId() 指定的 ID,从关系存储中读取一个或多个关系。由于方向未指定,因此由于交替起始和终止节点的组合,每个关系会产生两行。

根据函数 Id() 指定的 ID,从关系存储中读取一个或多个关系。由于方向未指定,因此由于交替起始和终止节点的组合,每个关系会产生两行。

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

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

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

使用索引查找来查找关系及其起始和终止节点。

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

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

通过执行相似性搜索从索引中查找关系。

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

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

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

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

对任意值执行哈希连接。

Eager

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

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

遍历给定节点的可变长度关系,并仅返回唯一的终止节点。

遍历给定节点的可变长度关系,并仅返回唯一的终止节点。

数据库命中 (DBHits)

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

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

  • 创建操作

    • 创建节点。

    • 创建关系。

    • 创建新的节点标签。

    • 创建新的关系类型。

    • 为具有相同名称的属性键创建新 ID。

  • 删除操作

    • 删除节点。

    • 删除关系。

  • 更新操作

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

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

  • 节点特定操作

    • 按 ID 获取节点。

    • 获取节点的度数。

    • 确定节点是否为稠密节点。

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

    • 获取节点的标签。

    • 获取节点的属性。

    • 获取现有的节点标签。

    • 按 ID 获取标签名称,或按名称获取 ID。

  • 关系特定操作

    • 按 ID 获取关系。

    • 获取关系的属性。

    • 获取现有的关系类型。

    • 按 ID 获取关系类型名称,或按名称获取 ID。

  • 常规操作

    • 按 ID 获取属性键名称,或按名称获取 ID。

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

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

    • 查找最短路径。

    • 向计数存储询问值。

  • 架构操作

    • 添加索引。

    • 删除索引。

    • 获取索引引用。

    • 创建约束。

    • 删除约束。

  • 调用过程。

  • 调用用户定义函数。