【发布时间】:2020-12-18 08:04:49
【问题描述】:
我有一个网络(例如水网络),我想找到拓扑结构:集群(圆形路径)、桥梁(连接集群的关系)和树(其余的)。
这里是用于创建示例网络的 Cypher 语句。(https://www.dropbox.com/s/e1gtqxlm9ngaau5/Cypher%20to%20create%20example%20network.cql?dl=0) 蓝色的关系是我正在寻找的集群,红色的关系是桥梁,绿色的关系是树木。
为了找到集群,我有两种方法,这两种方法都返回正确的结果。但两者都太慢了。
方法一: 从关系开始,查看开始节点和结束节点之间是否存在第二条路径。 这个需要大约 1000 万个 db hits
MATCH (n:WN)-[r:PIPE]->(m:WN)
WHERE EXISTS((n)-[r]->(m)-[:PIPE*2..]-(n))
RETURN r
方法 2: 首先寻找圆形路径,忽略方向。 (大约 12000)然后提取唯一关系。 这个需要大约 20M 的 db 命中。
MATCH path=(n:WN)-[:PIPE*..]-(n)
RETURN
apoc.coll.subtract(
apoc.coll.flatten(COLLECT(relationships(path))
),
[]
)
AS clusterRelationships
有没有更聪明的方法,可以更快地返回结果?
【问题讨论】: