【问题标题】:Compute all the relationships between 2 nodes计算 2 个节点之间的所有关系
【发布时间】:2018-02-02 10:08:20
【问题描述】:

我正在尝试计算 2 个节点之间的所有关系:

对我来说,shortestpathallshortestpathsapoc.algo.dijkstra 可以完美运行。但是这些并不能获取 2 个节点之间的所有关系。

这是我的查询,运行速度非常快:

MATCH (s:Stop)--(st:Stoptime), (e:Stop)--(et:Stoptime)    
WHERE s.name IN [ 'Schlump', 'U Schlump'] 
    AND e.name IN ['Hauptbahnhof Süd', 'HBF/Steintorwall' , 'Hamburg Hbf']
        AND st.arrival_time < et.departure_time 

MATCH p = allshortestpaths((st)-[r:PRECEDES*]->(et))
RETURN p

但是当我删除所有最短路径并查看所有关系时,它需要很长时间。

我尝试将查询拆分为多个查询,如下所示,但这也需要很多时间。

MATCH (s:Stop)--(st:Stoptime), (e:Stop)--(et:Stoptime)    

MATCH p1 = (st)-[r1*..4]-(st2:Stoptime),
 p2 = (st2:Stoptime)-[r2*..4]-(st3:Stoptime),
 p3 = (st4:Stoptime)-[r3*..4]-(st5:Stoptime),
 p4 = (st5:Stoptime)-[r4*..4]-(et:Stoptime)
 WHERE s.name IN [ 'Schlump', 'U Schlump'] 
    AND e.name IN ['Hauptbahnhof Süd', 'HBF/Steintorwall' , 'Hamburg Hbf']
 AND all(x1 in nodes(p1) WHERE (x1:Stoptime)) 
 AND all(x2 in nodes(p2) WHERE (x2:Stoptime)) 
  AND all(x3 in nodes(p3) WHERE (x3:Stoptime)) 
   AND all(x4 in nodes(p4) WHERE (x4:Stoptime)) 
RETURN r1, r2, r3, r4

我该怎么办? 如何找到某些节点之间的所有关系?

【问题讨论】:

    标签: neo4j cypher query-optimization dijkstra neo4j-apoc


    【解决方案1】:

    返回两个节点之间的所有路径是否可行,取决于图结构。

    如果你有圆形结构或密集图,两个节点之间会有非常多的路径。有关更多见解,请参阅此问题:Find all paths between two graph nodes

    我认为公共交通系统的图表会非常密集。因此,由于图论(不是因为未优化的查询),返回两个站点之间的所有路径不起作用。

    你必须弄清楚为什么你需要所有路径,以及你是否可以用不同的方式或有一些限制(例如最大长度)来制定查询。此外,如果您确实需要所有路径,您的图形结构可能不适合回答您的问题。

    【讨论】:

      猜你喜欢
      • 2014-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-18
      • 1970-01-01
      相关资源
      最近更新 更多