Cypher查询以“扩展”节点的路径

时间:2014-02-26 11:42:10

标签: neo4j cypher

我有两个cypher查询,其行为符合预期。我的图表仅包含通过关系连接的业务。

# Finding the shortest path that exists between two given business nodes
START a=node:Businesses('id: xxx'), b=node:Businesses('id: yyy')
MATCH a, b, p= shortestPath((a)-[*..15]-(b))
RETURN p

# Find all nodes connected 1-step out from a given business node
START a=node:Businesses('id: xxx')
MATCH (a)-[r:isRelated*]->(d)
RETURN distinct d,r

我现在想将这两个查询的各个方面合并为一个。我想找到任意两个给定节点之间的最短路径,并从返回路径中的节点前进一步。我尝试过下面的查询无效,因为p正在返回一个路径而我的第二个匹配语句正在期待一个节点。

START a=node:Businesses('id: xxx'), b=node:Businesses('id: yyy')
MATCH a, b, p= allShortestPaths((a)-[*..15]-(b))
WITH p
MATCH (p)-[r:isRelated*1]->(d)
RETURN distinct p,d,r

我应该如何编写此类查询?

1 个答案:

答案 0 :(得分:2)

这个怎么样:

START a=node:Businesses('id: xxx'), b=node:Businesses('id: yyy')
MATCH shortest=shortestPath((a)-[*..15]-(b)) 
WITH extract(n in nodes(shortest) | id(n)) as ids
MATCH pp=(x)-->(y)
WHERE id(x) in ids
RETURN pp

从最短路径收集所有节点ID,然后在第二部分中过滤。我猜这个查询不是很有效,但会完成这项工作。