我使用以下查询将数据从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 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 *”那样传递文件...
答案 0 :(得分:2)
如果要多次处理相同的Cypher语句,每次调整一个或多个值,可以使用APOC过程apoc.periodic.iterate。
在您的示例中,您希望事先执行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
参数。
答案 1 :(得分:0)
您可以简单地将所有文件放在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本身没有标准方法可以指定要导入的多个文件。