是否可以在 Cypher 中“重复”一个多于一跳的模式?

问题描述

想象一下,图中有两种关系::A:B。有像 (n1)-[:A]->(n2)->[:B]->(n3)->[:A]->(n4)->[:B]->(n5)->... 这样的模式。这里我只展示了这个“:A,然后是 :B”模式的 2 次重复,但它可以重复到任意深度。查询诸如“从节点 X 开始,然后尽可能地遵循此 A+B 模式,然后获取结果节点 Y”之类的内容可能会很有趣。

Gremlin 中,可以使用 repeat 步骤来实现这样的查询

在 Cypher 中,有可变长度模式 https://neo4j.com/docs/cypher-manual/current/syntax/patterns/#cypher-pattern-varlength ,因此我们可以为简单的重复模式编写类似 (x)-[:A*]->(y)内容,其中我们只重复一跳。

但我们能否对更复杂的模式(如我描述的 A+B 模式)做同样的事情?

我在他们推荐使用程序的地方找到了这个 Repetitive pattern of relationships in cypher,但它不是纯 Cypher(并且它是 Neo4J 的非标准扩展,在其他实现 Cypher 的系统中不可用)。

解决方法

目前只有关系序列的 APOC 方法是唯一的选择。

@Configuration

我们肯定希望能够在这个更简单的示例和更复杂的用例中捕获重复序列,并且已经围绕它们进行了设计讨论。所以这还没有出现,但设计和实施一个好的解决方案只是时间问题。