Cypher 查询列出所有断开连接的图 Neo4j 图数据库?

Rom*_*man 5 neo4j cypher

Neo4j 图形数据库包含大约 50,000 个节点和超过 50,000 个关系。有一个包含大多数节点的主图。但有几个图尚未连接到主图。

为了连接各种图以形成一个大的主图,我打算使用 Cypher 查询来列出按其大小排序的路径或连接节点的集合(首先是最大的断开连接图)。

stackoverflow 上有很多帖子,例如:

这是一个代表问题的小示例图: Neo4j Console example graph

以下 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;
Run Code Online (Sandbox Code Playgroud)

如何使用 Cypher 列出所有断开的(子)图?

环境: - Neo4j - 图形数据库内核 1.9.M05 - Java - SE 运行时环境(内部版本 1.7.0_17-b02)

Rol*_*olf 4

这不是一个完整的答案,但我认为您应该(如果可以的话)针对此用例回退遍历框架

Cypher 是关于匹配图表的特定部分,无论您想如何做。遍历框架实际上是关于如何遍历图的。

在您的情况下,遍历比要匹配的图表更重要。这是我的建议,使用遍历框架

  1. 按照您想要的方式标记节点组
  2. 当你在做的时候将结果聚合到地图(或者更进化的东西)中