微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决是否可以在 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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。