Neo4j 图数据库包含大约 50,000 个节点和 > 50,000 个关系。有一个包含大多数节点的主图。但是有几个图(尚未)连接到主图。
为了连接各种图以形成一个大的主图,我打算使用 Cypher 查询来列出按大小排序的连接节点的路径或集合(首先是最大的断开连接图)。
stackoverflow上有几篇文章,例如:
- 在图中查找所有断开连接的子图,但如何使用 Cypher 解决它并不明显。
- 如何使用 Cypher 在 neo4j 上找到断开连接的节点?
这是一个代表问题的小示例图: Neo4j 控制台示例图
以下 Cypher 查询不能解决问题,但只是一个起点。它列出了所有未连接到主图的节点。它错过了将这些节点组合成节点集合的过程。它适用于一个小图。在大图上,它只返回“未定义”......运行超过 10 分钟后。
START s=node(3), n=node(*)
MATCH s-[*1..10]-m
WITH collect(m) as members, n
WHERE NOT n in members
RETURN DISTINCT id(n), n.name?
ORDER BY id(n)
LIMIT 10;
如何使用 Cypher 列出所有断开连接的(子)图?
环境: - Neo4j - 图形数据库内核 1.9.M05 - Java - SE 运行时环境(构建 1.7.0_17-b02)