2015-04-23 80 views
2

我正在玩Neo4J,並試圖找到所有與人有聯繫的人。尋找有聯繫的人

我想要的是有一個(p:人)和看所有關係,並跟隨他們,直到我找到其他(p2:Person),並返回所有(p2)。從(p)到(p2)可以有不同的rute。幾個例子將是:

(p:Person)-->(:Tweet)-[:mentions]->(p2:Person) 
(p:Person)-->(:Tweet)-[:in_reply_to]->(:Tweet)-[:mentions](p2:Person) 
(p:Person)-[:follows]->(p2:Person) 

還有很多其他情況。更一般的,問題是,我想跟進,從(P:人)的關係,直到找到一個(P2:人)或該節點沒有更多outgoung,未使用的關係

回答

2

你可以試試這個

(p:Person)-[:mentions|in_reply_to|mentions*1..5]->(p2:Person) 

這將匹配所有匹配這些關係類型的長度爲1到5的路徑。如果你不關心這個,你也可以取出方向性。你可能想將其分配到的路徑變量,然後返回,就像這樣:

MATCH path=(p:Person)-[:mentions|in_reply_to|mentions*1..5]->(p2:Person) 
RETURN path 

如果你想找到兩個人之間的最短路徑:

MATCH path=shortestPath((p:Person)-[:mentions|in_reply_to|mentions*1..5]->(p2:Person)) 
RETURN path 
+0

還要注意'allShortestPaths '功能。請看這裏:http://neo4j.com/docs/stable/query-match.html#_shortest_path –

+0

如果我只想在兩個用戶之間找到一條路徑,neo4j會以shortestPath的速度運行嗎?還是隻是讓它變慢? (如果我查找所有與(p)有關的人,並且它是兩個人之間的連接。) –

+0

這是一個很好的問題。我不是。如果我不得不猜測我會說它可能大致相同,因爲它仍然需要查看所有可能的路徑。我建議你使用'EXPLAIN'和'PROFILE'來弄清楚改變你的查詢如何影響性能 –

相關問題