首页 > 解决方案 > Neo4j:(弱)连通分量算法,只选择一个分量

问题描述

我查看了我的数据在 Neo4j 中的数据库中是如何连接的。

我只想保留连接最多的组件(上图中的大小为 2170)。

我的数据有两种类型的节点,只有一种关系。

我怎样才能只选择大组件?

在此处输入图像描述

标签: neo4j

解决方案


所以可以做的就是先写回wcc算法的结果。一个例子是:

CALL gds.wcc.write('lpa_test', {writeProperty:'wccComponents'})

然后使用密码投影运行 LPA 算法:

CALL gds.labelPropagation.stream({
    nodeQuery:"MATCH (n:Character) WHERE n.familyComponent = 0
               RETURN id(n) as id",
    relationshipQuery:"MATCH (s:Character)-->(t:Character)
                       RETURN id(s) as source, id(t) as target",
    validateRelationships:false})
YIELD nodeId, communityId
RETURN nodeId, communityId

显然你的nodeQueryrelationshipQuery输入会有点不同,因为你可能有不同的图形模式,但我希望你明白这一点。

我在我的博客文章中做了一些非常相似的事情,只是我在最大的组件上运行了中介中心性算法。

希望这可以帮助!


推荐阅读