2014-02-26 37 views
0

我有两个密码查询的行为与预期相同。我的图形只是由通过关系连接的企业组成。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 

我应该如何去写这种类型的查询?

回答

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,然后在第二部分过滤的最短路径。我猜这个查询效率不高,但会完成这项工作。