[英]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)
但是查询执行时间太长,最终失败。 我在companyNumber
和comp_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
这将返回已处理的行数(通常为50000); 当它返回小于50000(或将限制设置为任何值)时,您就完成了。 然后运行这个家伙:
MATCH (n:Processed)
WITH n LIMIT 50000
REMOVE n:Processed
RETURN COUNT(*) AS processed
直到得到的结果小于50000。根据数据库的设置,您可能会将所有这些数字都设置为100000或更高。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.