Command line 在cypher中批处理或从Neo4j浏览器上载多个文件
我使用以下查询将数据从csv加载到Neo4j:Command line 在cypher中批处理或从Neo4j浏览器上载多个文件,command-line,neo4j,cypher,load-csv,Command Line,Neo4j,Cypher,Load Csv,我使用以下查询将数据从csv加载到Neo4j: CREATE CONSTRAINT ON (e:Entity) ASSERT e.entity IS UNIQUE; USING PERIODIC COMMIT 1000 LOAD CSV WITH HEADERS FROM 'file:/file1.csv' AS line FIELDTERMINATOR '|' WITH line MERGE (e0:Entity {entity: line.entities_0_entity}) ON
CREATE CONSTRAINT ON (e:Entity) ASSERT e.entity IS UNIQUE;
USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM 'file:/file1.csv' AS line FIELDTERMINATOR '|'
WITH line
MERGE (e0:Entity {entity: line.entities_0_entity})
ON CREATE SET e0.confidence = toFloat(line.entities_0_confidence)
MERGE (e1:Entity {entity: line.entities_1_entity})
ON CREATE SET e1.confidence = toFloat(line.entities_1_confidence)
MERGE (e0)-[r:REL {name: line.relation_relation, confidence: toFloat(line.relation_confidence)}]->(e1)
RETURN *
有人能告诉等价的查询从Neo4j命令行加载数据,或者在浏览器中动态更改文件名,或者像“file:/file*”那样传递它吗 您只需将所有文件放在neo4j的导入目录中,然后使用bash脚本加载所有文件:
#!bin/sh
for file in /Users/ikwattro/dev/_graphs/310/import/*
do
curl -H "Content-Type: application/json" \
-d '{"statements": [{"statement": "LOAD CSV WITH HEADERS FROM file:///$file AS row ..."}]' \
http://localhost:7474/db/data/transaction/commit
done
Neo4j本身没有标准方法指定要导入的多个文件。您只需将所有文件放在Neo4j的导入目录中,然后使用bash脚本将它们全部加载:
#!bin/sh
for file in /Users/ikwattro/dev/_graphs/310/import/*
do
curl -H "Content-Type: application/json" \
-d '{"statements": [{"statement": "LOAD CSV WITH HEADERS FROM file:///$file AS row ..."}]' \
http://localhost:7474/db/data/transaction/commit
done
Neo4j本身没有标准方法指定要导入的多个文件。如果要多次处理同一个Cypher语句,每次调整一个或多个值,可以使用APOC过程 在您的示例中,您希望预先执行
CREATE CONSTRAINT
语句(并且只执行一次)
例如:
CALL apoc.periodic.iterate(
"
WITH ['file1', 'x', 'y'] AS filenames,
UNWIND filenames AS name
RETURN name;
",
"
USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM 'file:/' + {name} + '.csv' AS line FIELDTERMINATOR '|'
WITH line
MERGE (e0:Entity {entity: line.entities_0_entity})
ON CREATE SET e0.confidence = toFloat(line.entities_0_confidence)
MERGE (e1:Entity {entity: line.entities_1_entity})
ON CREATE SET e1.confidence = toFloat(line.entities_1_confidence)
MERGE (e0)-[r:REL {name: line.relation_relation, confidence: toFloat(line.relation_confidence)}]->(e1);
",
{});
此查询将执行
LOAD CSV
语句3次(顺序执行,因为过程的parallel
选项默认为false
),每次传递一个字符串(“file1”、“y”和“z”)作为name
参数。如果要多次处理同一个Cypher语句,每次调整一个或多个值时,可以使用APOC程序
在您的示例中,您希望预先执行CREATE CONSTRAINT
语句(并且只执行一次)
例如:
CALL apoc.periodic.iterate(
"
WITH ['file1', 'x', 'y'] AS filenames,
UNWIND filenames AS name
RETURN name;
",
"
USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM 'file:/' + {name} + '.csv' AS line FIELDTERMINATOR '|'
WITH line
MERGE (e0:Entity {entity: line.entities_0_entity})
ON CREATE SET e0.confidence = toFloat(line.entities_0_confidence)
MERGE (e1:Entity {entity: line.entities_1_entity})
ON CREATE SET e1.confidence = toFloat(line.entities_1_confidence)
MERGE (e0)-[r:REL {name: line.relation_relation, confidence: toFloat(line.relation_confidence)}]->(e1);
",
{});
此查询将执行LOAD CSV
语句3次(顺序执行,因为过程的parallel
选项默认为false
),每次将其中一个字符串(“file1”、“y”和“z”)作为名称
参数传递