密码中关系的重复模式

时间:2019-05-09 10:41:13

标签: neo4j cypher

假设我的节点可以通过一组路径模式进行连接,例如:

(x:Class {code:'xxx'})<-[:a]-()-[:b]->()<-[:a]-()-[:b]->()<-[:a]-()-[:b]->()<-[:a]-()-[:b]->(y:Class{code:'yyy'})

<-[:a]-()-[:b]->x之间可以有数量可变的y。如果最短路径位于xy之间,我怎么能得到最短路径?

1 个答案:

答案 0 :(得分:2)

如评论中所述,APOC Procedures的路径扩展器proc提供了一种处理重复序列的方法。

但是,看起来您不仅在寻找一个特定的末端节点,而且还寻找在序列中该点发生的一个末端节点(而不是寻找那些关系对中间的节点)。

在那种情况下,我们还需要包括labelFilter,以指定我们感兴趣的序列中的哪个节点。或者我们可以只使用sequence config参数而不是label和Relationship过滤器。 / p>

MATCH (start:Class {code:'xxx'}), (end:Class{code:'yyy'})
CALL apoc.path.expandConfig(start, {endNodes:[end], sequence:'>Class, <a, *, b>', limit:1}) YIELD path
RETURN path

我们提供我们感兴趣的末端节点(因为我们已经知道了这些末端节点,我们已经将它们匹配),然后提供了交替的节点标签和关系类型的序列(使用*作为一个具有任何标签的节点,并使用前缀>作为结束节点过滤器,这意味着我们希望路径在序列的此位置处在此:Class节点处结束)。

路径扩展程序proc使用广度优先扩展,limit:1表示我们遇到的同时到达末端节点且满足序列模式的节点的第一条路径(此时的:Class节点在重复的顺序中)将是我们最短的路径。