0

我在 neo4j 中有一个数据集,看起来像这样:

(a)-[similar_to]->(b)

每个节点都有一个名为“id”的属性,它是唯一的。在以下示例数据集中,每个“a”节点与每个“b”节点都有一个“similar_to”关系:

a.id  b.id
1     5
1     2
2     13
3     12

拓扑如下所示:

图拓扑图像

我想做的是检索连接的两组节点的表,结果如下所示:

1, 2, 5, 13
3, 12

到目前为止,我能用 Cypher 做的最好的事情是:

MATCH (a)-[r:similar_to*]-(b)
RETURN collect(distinct a.id)

但是,它的输出是在一行上打印所有节点:

5, 1, 2, 3, 12, 13

我尝试了这个查询的各种排列,但一直失败。我在论坛中搜索了“subgraph”和“neo4j”,但找不到合适的解决方案。任何方向/想法将不胜感激。

谢谢!

4

1 回答 1

2

我的理解是你想要每个根节点“a”以及与“a”有直接/间接关系[:similar_to]的所有节点组,如果是这样,试试这个,

MATCH (a)-[r:similar_to*]->(b)
Where not(a<-[:similar_to]-())
RETURN a, collect(distinct b.id) as group

“WHERE”子句将节点“a”限制为每个组的根节点。“RETURN”子句按根节点“a”对匹配路径上的所有节点进行分组。

如果您想在组中包含每个根“a”,只需将路径更改为,

(a)-[r:similar_to*0..]->(b)
于 2013-11-01T12:41:54.483 回答