Neo4j 向现有节点添加大量关系

Neo4j add huge number of relationships to already existing nodes

我的标签 Person 和 Company 有数百万个节点。 我正在尝试建立关系: (person)-[:WORKS_AT]->(company) 基于两个标签中都存在的唯一公司编号 属性。 我正在尝试使用以下查询来做到这一点: MATCH (company:Company), (person:Person) WHERE company.companyNumber=person.comp_number CREATE (person)-[:WORKS_AT]->(company)
但查询执行时间太长,最终失败。 我在 companyNumbercomp_number 上有索引。 所以,我的问题是:是否有一种方法可以按段创建关系,例如(50000,然后是另一个 50000 等...)?

使用临时标签将事情标记为已完成,并在创建关系之前添加限制步骤。全部完成后,将每个人的标签移除即可。

MATCH (company:Company)
WITH company
MATCH (p:Person {comp_number: company.companyNumber} )
WHERE NOT p:Processed
WITH company, p
LIMIT 50000
MERGE (p) - [:WORKS_AT] -> (company)
SET p:Processed
RETURN COUNT(*) AS processed

这将 return 已处理的行数(通常为 50000);当它 return 小于 50000(或任何你设置的限制)时,你就完成了。 运行 这家伙然后:

MATCH (n:Processed)
WITH n LIMIT 50000
REMOVE n:Processed
RETURN COUNT(*) AS processed

直到你得到小于 50000 的结果。你可以将所有这些数字调到 100000 或更多,这取决于你的数据库设置。