2011-02-28 103 views
0

您知道人們是如何尋找類似或推薦的電影或電視劇嗎?「推薦」表格結構

http://www.anime-planet.com/anime/devil-may-cry

看到底部股吧推薦animes,他們相互交鏈的建議,因此,如果你對B鏈接一至 - b。您可以看到一個過了, 一個-to - B 乙至 - ç
ç-not-一個

我的問題是如何論文條目最好的處理?

Listings_Table

  • LIST_ID

  • LIST_TITLE

  • list_content

Recommends_Table

  • list_id_A

  • list_id_B

儘管這種方法會導致重複了很多,我認爲,查詢將是一個有點亂太,我認爲。任何建議表示讚賞。

回答

1

什麼你指的是一個相對簡單的推薦引擎。對於手動分配建議的小型數據集來說,它可以很好地工作,其中A指向B和B指向C,但它不是一種可擴展的方法。一旦你碰到任何不重要的產品,就不能維持(在我看來)。

你可能發現你提供更好的方法是使用一些更復雜。看看人們如何使用Google的Prediction API(http://code.google.com/apis/predict/docs/samples.html#demos)來做這種預測。在這種情況下,你不會存儲實際的鏈接,而是存儲用戶喜歡什麼,然後查看這些信息來建立你的建議。

雖然預測API是不是所有的人一個完美的解決方案,它會給你一個很簡單的方法來構建您的網站的建議部分,而無需學習機器學習技術的深度。

至於你上面的表結構,你就不需要,如果你沒有那樣做重複的數據。相反,我建議您在Suggested_table的兩列中查找您正在使用的元素。

例如,如果你在「Recommendations_table」以下記錄

list_id_A, list_id_B 
1, 2 
9, 12 
2, 3 

你可以抓住相關的一切「2」使用的查詢,工會,如:

select list_id_A from recommendations_table where list_id_B = 2 
union 
select list_id_B from recommendations_table where list_id_A = 2 

另外,你可以添加更多的SQL來確保你只返回唯一的結果。但最後,你如何填充這些信息,因爲這可能比其他任何東西都有所不同。

如果您想要更進一步,並使用像Cassandra這樣的nosql數據存儲的其他技術,您可以創建一個名爲Recommendations的列族,並且您的密鑰將是您正在查看的電影。接下來的列名將是推薦的電影ID。在這種情況下,您有這樣的事情爲結構:

Key, columns..... 
Movie A, 4, 5, 67,1, 9,3 
Movie B, 3, 4, 1 

在這種情況下,你會拉的所有列名的特定鍵,這將是你的推薦列表。

所有這些真的很有學問,不知道您計劃如何填充數據。

+0

感謝您的詳細回覆!我很感激。如果這有助於我制定它幾乎完全像我鏈接到的網站:http://www.anime-planet.com/anime/devil-may-cry 除了電影,而不是關於建議的筆記它只是圖片,標題和簡短的細節。 如果在Cassandra選項結構中設置它,MySQL是否能夠處理這些事情?是的,我想要一個適當的縮放方法,因爲它會變得很大。 再次感謝 – DregondRahl 2011-02-28 20:10:24

+0

當我建議像Cassandra這樣的東西時,我並不認爲它必然是SQL的替代品。相反,它會給你一個地方來查找你想要在你的建議中提出的事情的id。因此,您可以使用類似Cass的方法來獲取id,然後將關係信息存儲在SQL中,並根據您從其他數據存儲中取出的id查找SQL相關信息。 – dmcnelis 2011-02-28 20:16:28

0

如果(list_id_A,list_id_B)是Recommends_Table的主鍵,那麼您將不會有任何dublicates。另外,如果你希望鏈接是雙向的,那麼當在Recommends_Table中插入一個新行時,說(A,B),你還必須插入(B,A)。觸發器在這種情況下會有所幫助。

或者,你只能插入(A,B),或只(B,A),並使用該dmcnelis建議查詢:

select list_id_A from recommendations_table where list_id_B = 2 
union 
select list_id_B from recommendations_table where list_id_A = 2 

我認爲替代的解決方案是更好的,因爲你有更少的數據存儲在Recommends_Table中。但是,在這種情況下,如果表中已經有(A,B)行,那麼插入(B,A)也是無用的。爲了防止這種情況,您可以再次使用觸發器。