通过共享子节点查找最相似的节点

时间:2018-05-15 19:34:17

标签: neo4j cypher

我试图通过它们共享的子节点找到一个与另一个节点最相似的节点,然后列出它们共享的那些节点。

例如我有:

N1-[has]->A
N1-[has]->B
N1-[has]->C
N1-[has]->D

N2-[has]->A
N2-[has]->B
N2-[has]->E
N2-[has]->F

N3-[has]->A
N3-[has]->B
N3-[has]->C
N3-[has]->G

那么我想通过它的子节点到N1来检查哪个节点最相似。 它应该是N3,因为它们共享3个子节点

现在我可以使用

找到它所在的节点
match (n1:Node {name: "some name"})-[:HAS]->(i)<-[:HAS]-(n2:Node) 
with n2.name as n, count(*) as c 
return n order by c desc limit 1

但我需要他们共享的节点列表,我已经坐了很长时间了,并且无法理解它。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用collect()将类似节点存储到集合中,然后将其返回:

match (n1:Node {name: "some name"})-[:HAS]->(i)<-[:HAS]-(n2:Node) 
with n2.name as n, collect(i) as similarNodes, count(*) as c 
return n, similarNodes
order by c desc limit 1