寻找在Neo4j中具有最高共同关系的三胞胎

时间:2017-08-07 07:29:06

标签: neo4j cypher

我的图表中有两种类型的节点。一种是Testplan,另一种是Tag。测试计划被标记为标签。我希望大多数常见的标签对与具有特定名称的标签共享相同的Testplans。我已经能够实现最常见的标签与一个标签共享相同的Testplan,但在尝试为标签对进行操作时会感到困惑。返回单个标签列表的密码在

下面共享
MATCH (kw1:Tag)<-[e:TAGGED]-(tp1:Testplan)-[e2:TAGGED]->(kw2:Tag) 
WHERE kw1.name = "result"

RETURN kw1,kw2,count(tp1)

ORDER BY count(tp1) DESC

此cypher返回如下内容

Kw1                   kw2                       count(tp1)
“result”              “error”                   104
“result”              “prerequisites”           89
“result”              “alpha”                   63

我希望结果是

Kw1                   kw2                           count(tp1)
“result”              “error”,”prerequisites”       70
“result”              “error”,”alpha”               63

enter image description here

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:3)

MATCH (kw1:Tag)<-[e:TAGGED]-(tp1:Testplan)-[e2:TAGGED]->(kw2:Tag),
(tp1)-[:TAGGED]->(kw3:Tag)
WHERE kw1.name = "result"
AND ID(kw2)<ID(kw3)
RETURN kw2, kw3,count(tp1)
ORDER BY count(tp1) DESC

答案 1 :(得分:0)

我认为您可以使用collect()

轻松解决此问题
MATCH (kw1:Tag)<-[e:TAGGED]-(tp1:Testplan)-[e2:TAGGED]->(kw2:Tag) 
WHERE kw1.name = "result"
WITH tp1,collect(kw2) as tags,count(*) as count
RETURN tags,sum(count)

ORDER BY count DESC