2014-02-15 29 views
0

我正在使用Neo4J處理具有用戶及其電影排名的數據集。我有兩種節點類型 - 電影和用戶,以及將用戶級別賦予電影的單一關係。使用Neo4J計算排名數據庫中兩個用戶的相似度

我的目標是根據他/她與其他用戶之間的相似性來探索用戶的預測能力。

爲此,我想計算用戶之間的相似度,作爲他們都查看的電影的排名歸一化總和。這些信息應該存儲在用戶之間的關係中。

我有兩個特定節點以下的Cypher查詢工作:

MATCH (a)-[r1:RANKS]->(m), (b)-[r2:RANKS]->(m) where a.ID<>b.ID return a.ID,b.ID, sum(abs(r1.Rate-r2.Rate))/count(m) 

我想用此查詢還創建關係,但只要我嘗試以下方法:

MATCH (a)-[r1:RATES]->(m)<-[r2:RATES]-(b) where a.ID<>b.ID and a.ID="u_1" and b.ID="u_753" CREATE a-[:SIMILARITY_RANK{Similarity:(abs(r1.Rank-r2.Rank))/count(m)}]->(b) 

我得到錯誤消息,說我在錯誤的上下文中使用了count函數。我究竟做錯了什麼?

多坦

回答

0

請嘗試:

MATCH (a)-[r1:RATES]->(m)<-[r2:RATES]-(b) 
where a.ID<>b.ID and a.ID="u_1" and b.ID="u_753" 
with count(m) as count,a,b 
CREATE a-[:SIMILARITY_RANK{Similarity:(abs(r1.Rank-r2.Rank))/count}]->(b) 

計數不能使用的創建

+0

也感謝工作!同時移至常規SQL。 – user3314112

1

對我的作品(只是清理了一下):

MATCH (a:User)-[r1:RANKS]->(m:Movie)<-[r2:RANKS]-(b:User) 
WHERE a.ID<>b.ID 
RETURN a.ID,b.ID, sum(abs(r1.Rate-r2.Rate))/count(m) 

見: http://console.neo4j.org/r/4zb8fg

創建您的rel我做

MATCH (a:User)-[r1:RANKS]->(m:Movie)<-[r2:RANKS]-(b:User) 
WHERE a.ID<>b.ID 
WITH a,b, sum(abs(r1.Rate-r2.Rate))/count(m) as similarity 
CREATE a-[:SIMILARITY_RANK {Similarity:similarity}]->(b) 

我運行此控制檯上面

MATCH (a:User)-[r1:RANKS]->(m:Movie)<-[r2:RANKS]-(b:User) 
WHERE a.name<>b.name 
WITH a,b, sum(abs(r1.Rate-r2.Rate))/ count(m) AS similarity 
CREATE a-[:SIMILARITY_RANK { Similarity:similarity }]->(b) 
相關問題