在使用Cypher的Neo4j中:Neo4j - 只有共同朋友的人
我需要找到PersonB与PersonA完全相同的朋友。
例子: 保罗知道彼得,安娜和迈克和其他人。 找到还有谁知道彼得,安娜和迈克以及其他人。
在此先感谢。
在使用Cypher的Neo4j中:Neo4j - 只有共同朋友的人
我需要找到PersonB与PersonA完全相同的朋友。
例子: 保罗知道彼得,安娜和迈克和其他人。 找到还有谁知道彼得,安娜和迈克以及其他人。
在此先感谢。
这里是如何做到这样的查询故障。
// Match side a
MATCH (n1:Person)--(m:Person)
WITH n1, COLLECT(m) as friends
// Match side b
MATCH (n2:Person)--(m:Person)
WITH n1, n2, friends as friends1, COLLECT(m) as friends2
// Filter out a-b same node or non identical friends lists.
WHERE n1<>n2 AND SIZE(friends1) = SIZE (friends2) AND ALL (f in friends1 WHERE f in friends2)
RETURN n1, n2
谢谢你,这工作得很好。我相信你可以通过取出“AND SIZE(friends1)= SIZE(friends2)”并添加“AND ALL(朋友2在朋友1的哪里f)中”来获得相同的结果。 n1拥有n2和n2的所有朋友都拥有n1的所有朋友。 – pl80
@ pl80你想要SIZE检查。它过滤掉friends1是friends2的子集,如果SIZE检查失败,Cypher可以跳过比较列表,这将为您节省大量dbhits。 – Tezra
好点。我遇到的另一个问题是,当我没有指定n1是谁时,数据库将耗尽内存,因为我有30k关系,所以30k square = 900M对我的机器来说太大了。一旦我将n1缩小到一个人,查询就可以快速工作:) – pl80
Stackoverflow不是代码编写服务。请输入一些输入数据,预期输出和您尝试解决问题的方法。 –
@Fabio Lamanna,如果你没有给谈话带来任何有用的东西,你能不干涉吗?我的问题中列出了你的三个“请求”中的两个。 Stackoverflow帮助人们获得帮助,我很高兴Tezra帮助了我。 – pl80
我根本没有干涉,只是帮助你遵循[Stackoverflow指导方针](https://stackoverflow.com/help/on-topic)你应该问之前阅读。我很高兴有人做出了自己的努力,并为你解决问题。 –