我试图将csv导入neo4j但它工作但速度很慢。 所以我试图用'CONSTRAINT'来加速它。
我的以下作品
'USING PERIODIC COMMIT \
LOAD CSV WITH HEADERS FROM {filepath} AS row WITH \
row limit 1000 \
MERGE (spot:Spot{id:row.id}) \
.....there are more line actually ... \
'
但是当我向查询添加'约束'时它不起作用,比如语法错误。
'CREATE CONSTRAINT ON (s:Spot) ASSERT s.id is UNIQUE;\
USING PERIODIC COMMIT \
LOAD CSV WITH HEADERS FROM {filepath} AS row WITH \
row limit 1000 \
MERGE (spot:Spot{id:row.id}) \
.....there are more line actually ... \
'
我首先尝试运行约束,然后立即加载csv。但以下说了一些错误。
var unique_str = ' CREATE CONSTRAINT ON (s:Spot) ASSERT s.id is UNIQUE \
CREATE CONSTRAINT ON (c:City) ASSERT c.id is UNIQUE \
CREATE CONSTRAINT ON (t:Tag) ASSERT t.id is UNIQUE; '
它出了什么问题?
继续遇到问题,请有人指出我的错误。 我该怎么办? 提前谢谢!
答案 0 :(得分:2)
模式操作(例如创建约束和创建索引)必须在它们自己的事务中完成,其中该操作是事务中唯一的语句。
您使用的是哪个客户?使用官方Javascript驱动程序,它看起来像这样:
var neo4j = require('neo4j-driver').v1;
var driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("neo4j", "neo4j"));
var session = driver.session();
session.run("CREATE CONSTRAINT ON (s:Spot) ASSERT s.id is UNIQUE;");
session.run("CREATE CONSTRAINT ON (c:City) ASSERT c.id is UNIQUE;");
session.run("CREATE CONSTRAINT ON (t:Tag) ASSERT t.id is UNIQUE;");
session.run("USING PERIODIC COMMIT...");
session.run
将为每个语句创建一个隐式事务。
答案 1 :(得分:1)
我认为问题是如果你使用periodic commit
,它必须是第一行,这就是你得到语法错误的原因。我要做的是分别创建一个约束,然后像第一次那样运行查询。