2017-02-03 136 views
0

我使用下面的查詢加載從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 *」一樣傳遞它...... ??

回答

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默認情況下),使所述串中的一個(「文件1」, 「y」和「z」)作爲name參數。

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的本身並沒有標準的方法來指定多個文件進口。