2015-04-23 86 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'来弄清楚改变你的查询如何影响性能 –

相关问题