删除 Cypher 中所有节点和关系的最佳方法

Best way to delete all nodes and relationships in Cypher

通过 Cypher 从所有节点和关系中清除图形的最佳方法是什么?

http://neo4j.com/docs/stable/query-delete.html#delete-delete-a-node-and-connected-relationships例子

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r

有注释:

This query isn’t for deleting large amounts of data

那么,下面是不是更好一些?

MATCH ()-[r]-() DELETE r

MATCH (n) DELETE n

或者是否有其他方法更适合大图?

如您所述,最简单的方法是停止 Neo4j,删除 data/graph.db 文件夹并重新启动它。

通过 Cypher 删除大图总是比较慢,但如果您使用适当的事务大小来防止内存问题(请记住,事务在提交之前首先在内存中建立)仍然可行。通常 50-100k 原子操作是一个好主意。您可以在删除语句中添加限制以控制交易大小并报告已删除的节点数量。重新运行此语句,直到返回值 0:

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
WITH n,r LIMIT 50000
DELETE n,r
RETURN count(n) as deletedNodesCount

根据官方文档here

MATCH (n)
DETACH DELETE n

但它也表示This query isn’t for deleting large amounts of data。所以最好限制使用。

match (n)  
with n limit 10000  
DETACH DELETE n;  

写了这个小脚本,将它添加到我的 NEO/bin 文件夹中。

在 v3.0.6 社区上测试

#!/bin/sh
echo Stopping neo4j
./neo4j stop
echo Erasing ALL data
rm -rf ../data/databases/graph.db
./neo4j start
echo Done

当我的 LOAD CSV 导入很糟糕时,我会使用它。

希望对您有所帮助

optional match (n)-[p:owner_real_estate_relation]->() with n,p LIMIT 1000 delete p

在测试中 运行,删除了 50000 个关系,在 589 毫秒后完成。