我正在嘗試構建Facebook上人們喜歡的不同實體的圖形,以創建基本的跨域推薦引擎。neo4j(cypher)很慢
我有不同的實體(電影,書籍,音樂等)的數據。爲每個項目創建節點,其屬性爲項目名稱(電影名稱,圖書等)和項目實體類型(電影,書籍等)。任何兩個節點之間都有它們之間的關係,稱爲「關聯」這種關係也有一個「強度」屬性,這等於沒有。的人喜歡這兩個項目。
我使用FB用戶來連接這些節點。 FB用戶也是圖中的節點,其屬性是人的姓名和類型。這些節點和項目節點之間的關係稱爲「喜歡」。現在,如果一個人喜歡看電影,我想通過遍歷圖來推薦他的書籍或音樂。這是我想遍歷圖形的暗號查詢:
START root = node(<LIKED_MOVIE_NODE_ID>)
MATCH p = root-[rel1:affinity*..3]-(movies)<-[rel2:likes]-(persons)-[rel3:likes]->(books)
WHERE HAS(movies.type) and movies.type = "movies" and HAS(persons.type) and persons.type = "person" and HAS(books.type) and books.type = "books"
RETURN books
這將運行速度很慢,有時需要高達500秒。我有13000部電影,2000本書和3000個音樂節點。連接他們是16000人。所有在一起有約30萬的關係。
我的問題是:
我做錯什麼了嗎?有一個更好的方法嗎? 我是neo4j的新手。我已經嘗試了一些調整neo4j graphDB的技巧。我已經將最小堆大小增加到了4 GB,並且正在使用32 GB RAM的8核心機器上運行它。
我想知道rel1和rel2和rel3的關係的強度。 Rel1擁有財產實力。我無法找到它,
請指教,因爲我正在放棄neo4j並回到SQL的邊緣。至少它工作。當比較遍歷和核心API :(
Regds, Paritosh