【问题标题】:Is it possible to 'repeat' a pattern of more than one hop in Cypher?是否可以在 Cypher 中“重复”不止一跳的模式?
【发布时间】:2021-04-26 15:25:19
【问题描述】:

假设图中有两种关系::A:B。有像(n1)-[:A]->(n2)->[:B]->(n3)->[:A]->(n4)->[:B]->(n5)->... 这样的模式。在这里,我只展示了这种“:A”模式的 2 次重复,然后是 :B”模式,但它可以重复到任意深度。查询类似“从节点 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 的系统中不可用)。

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

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

    MATCH (start:Node {id:123})
    CALL apoc.path.expandConfig(start, {relationshipFilter:'A,B'}) YIELD path
    

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

    【讨论】:

      猜你喜欢
      • 2021-03-16
      • 2015-04-20
      • 1970-01-01
      • 1970-01-01
      • 2014-07-05
      • 1970-01-01
      • 1970-01-01
      • 2015-03-26
      • 1970-01-01
      相关资源
      最近更新 更多