2014-02-26 39 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,然後在第二部分過濾的最短路徑。我猜這個查詢效率不高,但會完成這項工作。