我相信您在 :User(name) 和 :Movie(movieId) 上都没有索引。
执行以下两个查询并重试您的 LOAD CSV 命令,它应该会在几秒钟内导入它:
CREATE CONSTRAINT ON (u:User) ASSERT u.name IS UNIQUE;
CREATE CONSTRAINT ON (m:Movie) ASSERT m.moveId IS UNIQUE;
其次,我假设用户只对一部电影进行一次评分,因此关系的 MERGE 不必与属性发生,您可以像这样更改您的查询:
LOAD CSV WITH HEADERS FROM "file:///ratings_small.csv" AS line
WITH line MERGE (u:User{name:line.userId})
MERGE (m:Movie {movieId:line.movieId})
MERGE (u)-[r:RATED]->(m)
SET r.rating = line.rating
RETURN u, m, r
为了避免 Neo4j 尝试在一个事务中处理完整的 CSV,您可以指定事务操作的批量大小(以避免内存问题),如下所示:
USING PERIODIC COMMIT 2000
LOAD CSV WITH HEADERS FROM "file:///ratings_small.csv" AS line
WITH line MERGE (u:User{name:line.userId})
MERGE (m:Movie {movieId:line.movieId})
MERGE (u)-[r:RATED]->(m)
SET r.rating = line.rating
RETURN u, m, r
最后,我怀疑您是否有任何应用程序甚至 Neo4j 浏览器可以一次可视化所有内容,因此我不会从 LOAD CSV 查询中返回任何内容:
USING PERIODIC COMMIT 2000
LOAD CSV WITH HEADERS FROM "file:///ratings_small.csv" AS line
WITH line MERGE (u:User{name:line.userId})
MERGE (m:Movie {movieId:line.movieId})
MERGE (u)-[r:RATED]->(m)
SET r.rating = line.rating