2014-11-05 48 views
0

我有一個擁有超過200萬個節點的圖形數據庫。我有一個應用程序需要一個社交圖,並對其進行一些推斷。作爲算法的一個步驟,我必須獲得兩個連接節點的關係[:朋友]的所有可能組合。目前,我有一個查詢,如下所示: match(a) - [:friend] - (c),(b) - [:friend] - (d)其中id(a)= {ida}和id(b )= {} IDB返回不同的C作爲第一,d爲第二neo4j笛卡爾產品性能改進

所以,我已經知道節點ab,我想所有的可以從ab朋友進行可能的對。 這顯然是一個非常緩慢的操作。我想知道是否有更有效的方式在neo4j中獲得相同的結果。也許增加索引可能有幫助?任何想法/線索都歡迎!

節點a具有朋友:xy 節點b具有朋友:ghi`` Then the result should be: X, X ,ħ X , ý, ý,ħ ÿ,我`

回答

1

如果你還沒有你應該使用標籤s就差你的查詢,這可能看起來像:

MATCH (p1:Person)-[:FRIEND]->(p3:Person),(p2:Person)-[:FRIEND]->(p4:Person) 
WHERE ID(p1) = 6 AND ID(p2) = 7 
RETURN p3 as first, p4 as second 

顯然,這將依賴於你已經有一個:Person標籤創建了節點。

平均節點有多少個朋友?

+0

謝謝你的回覆。你能否解釋爲什麼這會有所幫助?我不知道朋友的平均數量,但差別很大。從少數(少於10)到數百甚至數千。 – 2014-11-05 16:36:46

0

我不會使用兩種模式,但只有一個和IN運算符。

MATCH (p:Person)-[:FRIEND]->(friend:Person) 
WHERE id(p) IN [1,2,3] 
RETURN p, collect(friend) as friends 

然後你沒有交叉產品,你也可以很好地收回每個人的收集的朋友。