具有3个或更多节点的ShortestPath

时间:2015-11-30 12:47:24

标签: neo4j cypher

我正在尝试使用Neo4J执行Cypher查询。 我已经在2个节点之间执行了最短路径,但我想知道是否可以用更多节点执行。

Ex有两个节点:

MATCH (personA:Person { contactId: 1000073595058 }),(personB:Person { contactId: 1000295524418 }), p = shortestPath((personA)-[*..30]-(personB)) RETURN p 

Ex有3个节点:

MATCH (personA:Person { contactId: 1000073595058 }),(personB:Person { contactId: 1000295524418 }),(personC:Person { contactId: 1000331998948 }), p = shortestPath((personA)-[*..30]-(personB)-[*..30]-(personC)) RETURN p 

但是当我执行时返回一个异常。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

两个节点之间只能MATCH shotestPath。您必须拆分查询:

MATCH (personA:Person { contactId: 1000073595058 }),
      (personB:Person { contactId: 1000295524418 }),
      (personC:Person { contactId: 1000331998948 })
WITH personA, personB, personC
MATCH p = shortestPath((personA)-[..30]-(personB)
MATCH p2 = shortestPath((personB)-[..30]-(personC)
RETURN p, p2

根据您对结果的处理方式,您可以使用聚合功能,例如从两个路径获取所有节点:

...
RETURN nodes(p)+nodes(p2)