创建具有相同属性的节点之间的关系

问题描述:

我需要在所有节点之间创建具有相同属性值的关系。创建具有相同属性的节点之间的关系

例如,我可以使用下面的查询:

match (p1:Person), (p2:Person) 
where p1 <> p2 and p1.someproperty = p2.someproperty 
merge(p1)-[r:Relationship]-(p2) 
return p1,r, p2 

但是,如果我有节点的200K左右,这个脚本运行相当长。

还有其他更快捷的方式来创建这种关系吗?

感谢

你写首先创建人节点的所有配对之间的笛卡尔积,则不会过滤每个配对地发现,实际涉及的那些查询,然后创建关系。这是非常昂贵的,一个n^2操作。

相反,您可能只需要遍历所有人员节点,然后查找具有该属性的相应人员节点,并创建关系。

此外,如果您对所涉及的属性具有索引或唯一约束,则应该看到性能大大提高,否则它将是节点扫描该标签中的所有节点并进行每次比较,另一个影响缓慢的因素查询。

此外,如果可能的话,我鼓励您不要返回节点和关系,假设它处于数千或数十万个结果的邻域内。这可能是另一个因素。

match (p1:Person) 
with p1 
match (p2:Person) 
where p2.someproperty = p1.someproperty and p1 <> p2 
merge(p1)-[r:Relationship]-(p2) 

你应该能够解释这个查询和你的旧的查询,看看它们是如何运行的。

+0

非常感谢!这对我很好 –