在使用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)你應該問之前閱讀。我很高興有人做出了自己的努力,併爲你解決問題。 –