统计子图数
请问如何统计当前库中有多少个子图? 当前子图中有多少个节点, 有几类节点, 有几类关系?
10 回复
如果你的子图指的是连通子图,那么可以用下面的步骤:
- 取出一个节点n,把它的id赋予一个新节点属性,暂且称作component;
- 计算n的subgraph,即该节点可以到达的所有节点,将n的id赋予所有节点的component属性;
- 取出下一个没有component属性的节点,重复2,直到所有节点都有component属性。
下面是代码。运行前,需要: a. 加载并配置APOC扩展库; b. 定义component上的索引
// 计算图的连通分量,每1000个节点提交更新事务 // 使用apoc.periodic.commit迭代执行,直到没有节点a返回。 CALL apoc.periodic.commit(“MATCH (a:城市) WHERE a.component IS NULL WITH a LIMIT 1 CALL apoc.path.subgraphNodes(a, {maxLevel:-1}) YIELD node WITH node,a SET node.component = id(a) RETURN count(node)”,{limit:1000})
// 查询连通子图数量 MATCH (a:城市) WITH DISTINCT a.component AS component RETURN component