【问题标题】:Getting cypher of paths and rerunning them获取路径密码并重新运行它们
【发布时间】:2017-03-02 07:58:05
【问题描述】:

我有一个有点独特的场景。我将得到一个节点 A。从节点 A,我想找到到其他一些节点的路径(比如节点集 C)。一旦我得到这些路径集,我想从另一个节点 B(对应于/类似于节点 A)重新运行这些路径,以发现遵循相同路径(如从节点 A 到集合 C) 中的节点。

例如,如果(A) 我有(E),(G) 遵循这些路径:

   ---[:Rel2]--->(F)---[:Rel1]--->(G)
  /
(A)---[:Rel1]--->(E)

那么对于(B),我应该得到(J),(H) 遵循相同的路径,但不应该得到(K),因为它不遵循为(A)返回的任何路径模式:

   ---[:Rel2]--->(I)---[:Rel1]--->(J)    
  /
(B)---[:Rel1]--->(H)
  \
   ---[:Rel2]--->(K)

截至目前,我的做法如下:

  • 给定 A,运行初始密码以获取所需路径。
  • 路径作为org.neo4j.driver.v1.types.Path 的实例返回。每个Path 实例本质上是org.neo4j.driver.v1.types.Path.Segment 实例的列表。因此,遍历Segment 列表以形成每个对应路径的密码字符串。
  • 使用密码字符串从 B 执行 MATCH

这是可行的,但是,从 Segment 类的 Java 列表中形成密码字符串给我一种奇怪的感觉。我不知道这种方法是否正确。还有其他更好看的方法吗?或者这种方法还可以吗?有什么推荐的方法吗?有没有人遇到过类似的情况?

编辑:您可以将第一个图视为(“部分”,因为它没有与实例子路径 (B)---[:Rel2]--->(K) 对应的架构定义)架构和第二个图作为该架构的实例架构。我们首先在 schema 中找到路径,然后在实例上运行它。

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    我以前没有遇到过这种需求,但我认为它属于图同构的范畴。 Neo4j 和 APOC 目前都没有这方面的功能,或者获取路径的元素并将它们重新应用到不同的节点。

    目前,这听起来像是自定义过程的工作,而这正是您可能正在做的事情。

    否则,Cypher 中有一些方法可以过滤路径以符合由关系类型集合定义的关系,但我认为不会在路径扩展期间对其进行评估,因此它在更繁忙的图上可能效率不高。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2013-07-06
      相关资源
      最近更新 更多