如何在Neo4j中返回集群?

vecaoik1  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(128)

我对neo4j很陌生。
需要将输出作为已分组节点的数组。

在附加的图像有13个节点组。
比如说,
“img8”、“img9”、"img47“、" img50”、“img51”]是一组
'img20','img21']是另一组。
像这样,我们在附加图像中有13个节点集。
我需要输出像。
[[set1],[set2],.....,[set13]]

w41d8nur

w41d8nur1#

如果您install Neo4j Graph Data Science(GDS)插件,则可以使用社区检测算法。特别是,Weakly Connected Components(WCC)算法将对您的用例非常有用。以下是其文档中的一个片段:
弱连通分量(WCC)算法在有向图和无向图中找到连通节点的集合。如果两个节点之间存在路径,则它们是连接的。彼此连接的所有节点的集合形成组件。与强连通分量(SCC)相比,不考虑两个节点之间的路径上的关系的方向。
例如,如果你只关心Img节点(具有name属性)和DISTANCE关系,你可以这样做:

// Create an in-memory GDS projection for the Img nodes and DISTANCE relationships
CALL gds.graph.project('imgs', 'Img', 'DISTANCE') YIELD graphName
// Run WCC algorithm to find each "component", in which every pair of nodes is connected by some path (ignoring directionality)
CALL gds.wcc.stream('imgs', {}) YIELD nodeId, componentId
// For each component, collect a list of the names of all nodes in that component
WITH componentId, COLLECT(gds.util.asNode(nodeId).name) AS names
// Collect all those lists into an outer list (this is the result you asked for)
RETURN COLLECT(names) AS result

GDS投影将继续占用服务器上的内存,直到您删除投影或重新启动neo4j。要删除名为“imgs”的投影,请执行以下操作:

CALL gds.graph.drop('imgs')

上面的内容仅仅触及了GDS的表面,但应该给予您实现用例的帮助。

相关问题