2015-02-08 47 views
1

我正在嘗試製作書籍的推薦網站。我已經抓取了一些書籍站點,並且在DB中有大約1,500萬冊單獨的書籍,其在neo4j中。neo4j中針對大型數據集的基於內容的記錄系統

現在對於一些流派,如神祕和驚悚片,至少有一百萬本書。我必須列出前20名的建議。我現在approach-

  1. 拿到書
  2. 運行相似度比較(VEC-餘弦或pearsons)
  3. 排序和顯示

價格昂貴,而且需要時間,不是爲好一個實時系統。我認爲通過將neo4j鏈接到傳統的數據庫並通過neo4j從該數據庫獲取最高的數據庫,可以保持每個流派的排序列表。但這也很慢(需要幾秒鐘)。有沒有更簡單,更直觀的方法來做到這一點?任何想法都會有幫助。

回答

2

很高興知道您希望根據您的建議採取哪些其他標準,例如,你如何衡量書籍之間的相似度。我假設它不是基於流派的。

我們一直在使用這些密集節點(例如您的流派,或居住在城市的人等),我們首先根據其他標準找到建議,然後提高建議的相關性分數if它連接到正確的密集節點。這樣的查詢性能要高得多。

例如,當推薦20個人時,您應該成爲朋友,我會根據所有其他標準找到100個候選人,然後提高與我們推薦的用戶居住在相同位置的候選人的分數。這是100單跳遍歷,這將是非常快速的。

看看this recent webinar recording,你可能會發現它的一些靈感。

關於相似性度量,這些可能需要預先計算,通過SIMILAR_TO關係將類似書籍連在一起。這樣的預計算可以使用GraphAware FrameworkRuntime完成,它只在靜默期間執行此背景計算,因此不會干擾您的常規事務處理。查看NodeRank模塊,該模塊在靜默期間計算Neo4j中的PageRank。

相關問題