Neo4j删除标签中的所有节点及其关系

时间:2016-11-17 13:40:02

标签: neo4j cypher

我知道这个问题已被多次询问,但答案并没有解决我的问题。 我想删除标签TelephoneNumber中的所有节点及其关系(数百万)。 我试过用这种方式删除关系:

MATCH (:Person)-[r:HAS_TELEPHONE_NUMBER]->(:TelephoneNumber)
DELETE r

但在一定时间后我收到错误GC overhead limit exceeded。我试过像这样限制查询:

MATCH (:Person)-[r:HAS_TELEPHONE_NUMBER]->(:TelephoneNumber)
WITH r LIMIT 100
DELETE r

但我得到同样的错误。 我尝试过另一种方式:

MATCH (t:TelephoneNumber) OPTIONAL MATCH (t)-[r]-()
DELETE t,r

但我又得到了同样的错误。 如何在不超过垃圾收集器开销限制的情况下删除标签中的所有节点及其关系?

1 个答案:

答案 0 :(得分:1)

您可能希望利用APOC程序apoc.periodic.commit()。此外,由于您要删除节点,DETACH DELETE将有所帮助,因为这将从节点中删除所有关系,然后删除节点本身。

使用示例可能是:

call apoc.periodic.commit("
match (tel:TelephoneNumber)
with tel limit {limit}
detach delete tel
return count(*)
",{limit:10000})

您可以根据需要调整批量大小限制,但10000通常可以正常工作。