【发布时间】:2018-10-30 13:32:02
【问题描述】:
在阅读https://markorodriguez.com/2011/09/22/a-graph-based-movie-recommender-engine/ 之后,我目前正在使用 MovieLens 20m 数据集进行电影推荐。 Node Movie 通过关系 hasGenre 连接到 Genre,Node Movie 通过关系 hasRating 连接到 User。我正在尝试使用与玩具总动员共享所有类型的查询(例如玩具总动员)检索所有评分最高(共同评分 > 3.0)的电影。这是我的 Cypher 查询:
MATCH (inputMovie:Movie {movieId: 1})-[r:hasGenre]-(h:Genre)
WITH inputMovie, COLLECT (h) as inputGenres
MATCH (inputMovie)<-[r:hasRating]-(User)-[o:hasRating]->(movie)-[:hasGenre]->(genre)
WITH inputGenres, r, o, movie, COLLECT(genre) AS genres
WHERE ALL(h in inputGenres where h in genres) and (r.rating>3 and o.rating>3)
RETURN movie.title,movie.movieId, count(*)
ORDER BY count(*) DESC
但是,我的系统似乎无法处理它(使用 16GB RAM、Core i7 第 4 代和 SSD)。当我运行查询时,它会达到 97% 的 RAM 然后 Neo4j 意外关闭(可能是由于堆大小或 RAM 大小)。
- 我的查询是否正确?我是 Neo4j 的新手,所以我的查询可能不正确。
- 请建议如何优化此类查询?
- 如何优化 Neo4j,使其能够根据查询处理符合我系统规范的大型数据集?
提前致谢。
【问题讨论】:
标签: performance neo4j cypher