Neo4j 合并查询的临时节点

Neo4j 合并查询的临时节点,neo4j,Neo4j,我试图使用搜索来查看是否有人问过这个问题,但我找不到任何解决我问题的方法。如果我没有看到正确的问题,请不要责怪我 正如我试图在标题中描述的那样,我希望为请求合并节点。想象一个包含家谱的图形。我的图形中有多个族。每个家庭都有成员代表。所以你和你的兄弟a-[:hasBrother]->B有联系,依此类推。您还与其他家庭有联系。例如,您通过A-[:knows]->C连接到另一个家族的某个人。现在我想合并这些家族,因为我对家族X到Z之间的连接感兴趣。但在这条路径上,我希望将家族视为一个节点,它与其他家族

我试图使用搜索来查看是否有人问过这个问题,但我找不到任何解决我问题的方法。如果我没有看到正确的问题,请不要责怪我

正如我试图在标题中描述的那样,我希望为请求合并节点。想象一个包含家谱的图形。我的图形中有多个族。每个家庭都有成员代表。所以你和你的兄弟a-[:hasBrother]->B有联系,依此类推。您还与其他家庭有联系。例如,您通过A-[:knows]->C连接到另一个家族的某个人。现在我想合并这些家族,因为我对家族X到Z之间的连接感兴趣。但在这条路径上,我希望将家族视为一个节点,它与其他家族节点有连接。Neo4j是否可以实现这一点

我举一个例子:

A is part of Family 1; b,c,d is part of Family 2; e is part of family 3

A<-->B

B<-->C

C<-->D

D<-->E

E<-->F
A是族1的一部分;b、 c,d是家庭2的一部分;e是家庭3的一部分
AB
卑诗省
光盘
判定元件
环境足迹
当我寻找家庭1和家庭1之间的连接长度时,我希望得到两个

我希望你明白我的问题,你能帮助我。
至少,谢谢你的阅读

是的,你可以这样做。首先,你需要一种识别家庭的方法。我将展示一个简单的示例,假设姓氏标识族,并且您拥有这些数据。请注意,它可能没有那么简单,但作为一个例子,我需要使用一些东西:

MATCH (p:Person)
MERGE (f:Family { name: p.lastName }) // Create a family with this last name.
MERGE (p)-[:part_of]->(f);   // Link everybody to the right family.
现在,您要做的很简单:

MATCH (f1:Family)<-[:part_of]-(p1:Person)-[:knows]->(p2)-[:part_of]->(f2:Family)
WHERE f1 <> f2 and f1.id < f2.id
MERGE (f1)-[:knows]->(f2)
<代码>匹配(f1:系列)(p2)-[:部分]->(f2:系列) 其中f1 f2和f1.id(f2) 基本上这是说,当你有两个不同的家庭(f1和f2),在这些家庭中的人相互认识,然后这些家庭相互认识。我添加了一个排序谓词(f1.id 请注意,根据您拥有的“知道”链接的数量,这可能需要一些时间来运行。基本上,你必须考虑每一个成对的人关系来正确地更新链接。
你不必把家庭相互了解这一事实具体化。注意,在第二个查询的
MATCH
子句中,我们已经知道f1和f2彼此认识。如果您可以根据需要重新运行该匹配,则不必实际创建从f1到f2的新关系。

恐怕这个问题太广泛了。您的示例也令人困惑,因为尽我所能,族1和族2之间只有一个连接。请注意,如果您希望此信息是临时的(根据问题标题),则必须在之后删除族节点和关系。是的-实际上,我添加了关于实现族的节点“知道”关系,因为对于一个大的图,具体化它们的成本已经足够高了,我一开始可能不会这么做。这是O(n^2)查询之一。