Neo4j 如何查询这两个节点之间的关系?

Neo4j 如何查询这两个节点之间的关系?,neo4j,Neo4j,如果我有一个节点(p)和(e)的类似图: 我有以下数据: (Person {name: Andrew})-[r:WorksFor]->(Employer {name: Google}) (Person {name: James})-[r:WorksFor]->(Employer {name: Google}) (Person {name: James})-[r:WorksFor]->(Employer {name: Apple}) (Person {name: Evan})-[

如果我有一个节点(p)和(e)的类似图:

我有以下数据:

(Person {name: Andrew})-[r:WorksFor]->(Employer {name: Google})
(Person {name: James})-[r:WorksFor]->(Employer {name: Google})
(Person {name: James})-[r:WorksFor]->(Employer {name: Apple})
(Person {name: Evan})-[r:WorksFor]->(Employer {name: Apple})
如何通过每个关系查询(Person{name:Evan})之间的关系,并访问(Person{name:Andrew})返回沿途的每个雇主和人员以及任意数量的雇主和人员

理想情况下,上述内容将返回一个如下所示的链:

(Andrew)->(Google)->(James)->(Apple)->(Evan)
谢谢你的帮助

(编辑)增编:

下面的方法似乎有效,但只有当玩家之间的距离只有两度时,有没有办法使这个长度完全可变

MATCH 
(p:Person {name: "Andrew"})-->(e:Employer)<--(p3:Person)-->(e2:Employer)<--(p2:Person {name: "Evan"}) 
RETURN *
匹配
(p:Person{name:“Andrew”}-->(e:Employer)(e2:Employer)你想要的

根据图形的不同,您可以定义要遍历或保留类型的关系。我们可以省略方向以指定不关心要遍历的关系的方向:

MATCH path = (p:Person {name: "Andrew"})-[:WorksFor*]-(p2:Person {name: "Evan"}) 
RETURN path
如果需要路径中的节点,可以返回
节点(路径)
以获取该列表

如果只需要这两条路径之间的最短路径,则可以同时匹配,然后使用“最短路径”功能进行匹配:

MATCH (p:Person {name: "Andrew"}), (p2:Person {name: "Evan"}) 
MATCH path = shortestPath((p)-[:WorksFor*]-(p2))
RETURN path

如果人员计数为4000,而雇主计数为30,且数据持续切换约40年,这是否容易导致内存不足问题?我想问题真的是:考虑到一个非常密集的数据集,这会有多大的负担?编辑:我问,因为这似乎完全超时了我的数据集。在密集图中,最短路径()可能是最好的选择。任何适度连接的图中的无界变长关系都可能挂起,特别是当您请求所有可能的路径时,这些路径很容易通过堆。如果您不关心所有可能的路径,只需要一条路径,那么您有更多的选择。如果你的要求不同于你在上述问题中的要求,你可能会考虑把问题作为一个单独的问题来考虑。
MATCH (p:Person {name: "Andrew"}), (p2:Person {name: "Evan"}) 
MATCH path = shortestPath((p)-[:WorksFor*]-(p2))
RETURN path