2015-03-13 30 views
1

我有一個neo4j數據庫,包含用戶,曲目和DJ,用戶與DJ有相似之處,DJ可以播放曲目。現在我想找出所有由具有與用戶相似的DJ,東西打得像在neo4j中找到明確的關係

MATCH (u:User {userId:'6'})-[s:SIMILARITY]->(dj:Dj)-[p:PLAYED]->(t:Track) 
return COUNT(t)*s.similarity AS count,t order by count; 

問題的軌道是DJ的可以多次,我已經由多個PLAYED代表播放音軌DJ和曲目之間的關係。所以如果一個dj多次播放曲目,它會通過這個查詢獲得更多的權重,而我只想讓這些多個關係計數一次。

的解決方案可能是一些與DISTINCT,但我不知道在哪裏把它(計數(不同T)沒有得到期望的結果)。另一種方法是將數據庫重構爲只有一個PLAYED關係,並將PLAYED的timestamp屬性存儲爲一個數組。

在這種情況下,我想執行一個查詢(其他地方)問:「找到所有跟蹤該時間戳在此之後跟着DJ播放」,這也將解決這個問題,但我不知道怎麼辦。

在此先感謝

回答

2

您的cypher語句已經非常接近解決方案。但是你彙總的軌道和要使用的關係的計數到賽道的重量,請注意,我已經改變了count(t)count(p)

MATCH (u:User {userId:'6'})-[s:SIMILARITY]->(dj:Dj)-[p:PLAYED]->(t:Track) 
return t, COUNT(p)*s.similarity AS weight order by weight; 
+0

這麼簡單,謝謝! – user3136936 2015-03-13 09:14:44