通过cypher查找节点之间的路径

Mar*_*ijn 5 neo4j cypher

我创建了一个应用程序,用电子邮件记录填充Neo4J数据库.我创建了两种类型的节点,人和邮件,我创建了4种类型的关系,发送,cc,到&reply_of.

现在我想找到两个没有直接连接的节点之间的关系.例如P1和P3之间(见图).

我怎样才能通过密码实现这一目标?它在neo4j中可行吗?

人与人之间的关系

更新的问题:

首先让我澄清一下有关图片的内容......

Reply_OF关系是邮件节点之间的关系.它在原始邮件和转发邮件的任何回复之间创建关系.Sent,To,Cc和Bcc关系在人员节点和邮件节点之间创建关系.人员节点之间没有直接关系.

提交这个问题并阅读答案让我意识到我想知道其他的东西......我真正想知道的是我如何能够显示所有已经看过原始邮件的回复或转发邮件的人员节点原始邮件中的"收件人","抄送"或"密件抄送"列表.

Ste*_*ter 6

用 Neo4j 术语来说,您想要找到 P1 和 P3 之间的路径。关系仅连接两个邻居。

我假设P节点带有Person标签,并且有一个name属性,在这种情况下您可以使用:

MATCH p=(p1:Person {name:'P1'})-[:SENT|:TO|:CC|:BCC*1..20]->(p3:Person {name:'P3'})
RETURN p
Run Code Online (Sandbox Code Playgroud)

在很多情况下,您对它们之间的最短路径感兴趣:

MATCH p=shortestPath((p1:Person {name:'P1'})-[:SENT|:TO|:CC|:BCC*1..20]->(p3:Person {name:'P3'})
RETURN p
Run Code Online (Sandbox Code Playgroud)


Ste*_*ter 3

回答更新后的问题:

我假设您的电子邮件节点带有 标签Email并具有 属性mailId

MATCH (mailToTrack:Email {mailId: 'mymailid'})-[:Reply_Of*1..100]->()-[:TO|:CC|:BCC]->(person)
RETURN distinct person
Run Code Online (Sandbox Code Playgroud)