0

大家好 Stackoverflow,

我有简单的查询来加载 csv,但是浏览器需要很长时间才能加载并且仍然显示加载符号。

这是我的查询:

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 {rating:line.rating}]->(m) 
RETURN u, m, r

我在代码中没有看到错误..

rating_small.csv 具有以下列:

userId movieId 评分时间戳

1 31 2.5 1260759144

1 1029 3 1260759179

1 1061 3 1260759182

1 1129 2 1260759185

1 1172 4 1260759205

有 100 004 条记录。

亲切的问候,安娜

4

1 回答 1

2

我相信您在 :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
于 2020-12-28T19:52:37.223 回答