2015-10-02 21 views
5

我有一個使用NEO4j的圖形,目前正試圖構建一個比基於文本的搜索更好的簡單推薦系統。圖形數據庫獲取Neo4j密碼的下一個最佳推薦節點

節點被創建如:相冊,人,類型,圖表

關係創建如:

People - [:role] -> Album 其中角色是:藝術家,生產商,歌曲作者

Album-[:is_a_type_of]->Type(類型是基本上流行,搖滾,迪斯科...)

People -[:POPULAR_ON]->Chart(圖表是哪個廣告牌他們可能已經)

People -[:SIMILAR_TO]->People(預設相似連接)

我寫了下面的暗號:

MATCH (a:Album { id: { id } })-[:is_a_type_of]->(t)<-[:is_a_type_of]-(recommend)  
    WITH recommend, t, a 
    MATCH (recommend)<-[:ARTIST_OF]-(p) 
    OPTIONAL MATCH (p)-[:POPULAR_ON]->() 
    RETURN recommend, count(DISTINCT t) AS type 
    ORDER BY type DESC 
    LIMIT 25; 

它的工作原理但是,它很容易重演,如果它只有一種類型的連接到它的音樂,因此有同樣的鄰居。

是否有建議的方式說:

  • 找到我說,必須從首發專輯的最相似的關聯關係下一個最好的專輯。
  • 任何關於平局方案的建議?現在它是按照類型排序的(所以如果一張專輯有多種類型的音樂,它的價值會更高,但是如果每個人都有相同的編號,則不會有更多
  • -I made the [:SIMILAR_TO] link執行一個優先考慮的關係一樣重要,但我還沒有與它的工作暗號
  • -Same無二[:Popular_On](?也許放棄這一關係)

回答

1

您可以使用4配置和按照此順序的更高價值訂購專輯。保持0到1之間的配置(例如0.6)

a. People Popular on Chart and People are similar 
b. People Popular on Chart and People are Not similar 
c. People Not Popular on Chart and People are similar 
d. People Not Popular on Chart and People are Not similar 

計算並將這4個值與每個專輯相加。值越高,推薦專輯越高。

我暫時將配置設置爲a = 1,b = 0.8,c = 0.6,d = 0.4。並假設有一些關係表明某些人喜歡唱片。如果您僅基於Chart製作邏輯,則僅使用& b。

MATCH (me:People) 
where id(me) = 123 
MATCH (a:Album { id: 456 })-[:is_a_type_of]->(t:Type)<-[:is_a_type_of]-(recommend)  
OPTIONAL MATCH (recommend)<-[:ARTIST_OF]-(a:People)-[:POPULAR_ON]->(:Chart) 
WHERE exists((me)-[:SIMILAR_TO]->(a)) 
OPTIONAL MATCH (recommend)<-[:ARTIST_OF]-(b:People)-[:POPULAR_ON]->(:Chart) 
WHERE NOT exists((me)-[:SIMILAR_TO]->(b)) 
OPTIONAL MATCH (recommend)<-[:LIKES]-(c:People) 
WHERE exists((me)-[:SIMILAR_TO]->(a)) 
OPTIONAL MATCH (recommend)<-[:LIKES]-(d:People) 
WHERE NOT exists((me)-[:SIMILAR_TO]->(a)) 
RETURN recommend, (count(a)*1 + count(b)*0.8 + count(c)* 0.6+count(d)*0.4) as rec_order 
ORDER BY rec_order DESC 
LIMIT 10; 
+0

我理解你的邏輯,但我也不明白你是什麼意思,通過配置和計算+總和參照圖形類型學。請詳細說明如果需要使用僞密碼 – azngunit81

+0

@ azngunit81:用查詢更新答案。 –

+0

兩個問題:1)你是什麼意思Config..is這個重量? 2)人們不是指你。人們的意思是藝術家,製作人,作曲家等......(正如我的問題所解釋的) – azngunit81

相關問題