tmp.csv Id,Name,Year,Lable 8,ppx,1992,movies 9,大傻瓜,1986,movies:action 希望导入实体的时候,把各自的标签也同时导入。 请问cipher语句该怎么写呢?(不使用apoc,很多线上服务的容器里没有装apoc,暂时不用apoc)。 (https://www.google.com/search?q=LOAD+CSV+lables&oq=LOAD+CSV+lables&aqs=chrome…69i57j33.7705j0j7&sourceid=chrome&ie=UTF-8)没有找到合适的答案。 Thankyou!
不考虑apoc的话,LOAD CSV不能多标签,必须指定标签,另外一个角度来看设置多标签会很影响性能,因此官方不支持可能也是这个考虑。可以试试下面的方法(增加一个Type字段):
// 先导入节点
USING PERIODIC COMMIT 1000
LOAD CSV FROM "file://tmp.csv" AS line
MERGE (n:Movie {Id:line.Id}) SET n.Name=line.Name,n.Year=line.Year,n.Type=line.Type
// 然后启动批量更新进程
CALL apoc.periodic.iterate(‘MATCH (n:Movie) WHERE n.Type=Action RETURN n’,‘WITH {n} AS n SET n:Action’,{batchSize:10000,parallel:false});
CALL apoc.periodic.iterate(‘MATCH (n:Movie) WHERE n.Type=Documentary RETURN n’,‘WITH {n} AS n SET n:Documentary’,{batchSize:10000,parallel:false});
// (另外where后面的属性勿必创建索引)
CREATE INDEX ON :Movie(Type);
@crazyyanchao Thankyou。但因为库比较大,标签的种类非常多,可能不大好一个一个枚举更新。 刚才试了下可以使用./neo4j-import --into /data2/neo4j/erictest1/databases/graph.db --nodes movies.csv --input-encoding UTF-8 --stacktrace true --bad-tolerance 10000 --skip-bad-relationships true --skip-duplicate-nodes true neo4j=import建新库的时候可以把 每个实体的多个标签 直接在创建实体的时候写上去。 👍
@crazyyanchao 请问如果导入的实体的属性很稀疏,对于导入的效率影响大吗? 比如属性的种类有5000,但大部分实体都只有其中的十几二十个属性。 这时的LOAD CSV所使用的csv表就是一个巨大的稀疏矩阵,请问这个情况下对于neo4j-import的执行效率影响大吗?