[英]Neo4j creating relationships using csv
我正在嘗試使用加載的csv文件在兩種類型的節點之間創建關系。 我已經創建了所有電影和關鍵字節點。 我還創建了索引:電影(標題)和:關鍵字(單詞)。
我的csv文件看起來像:
“title”|年|“word”//標題
“進入狂野”| 2007 |“1990”//與標題,年份和關鍵字一致
“走進野外”| 2007 |“廢棄的公共汽車”
我的查詢:
LOAD CSV WITH HEADERS FROM "file:/home/gondil/temp.csv" AS csv
FIELDTERMINATOR '|'
MATCH (m:Movie {title:csv.title,year: toInt(csv.year)}), (k:Keyword {word:csv.word})
MERGE (m)-[:Has {weight:1}]->(k);
查詢運行大約一個小時,而不是顯示錯誤“未知錯誤”。 多余的錯誤描述。
我認為這是由於160K關鍵詞和超過1M電影以及csv中超過4M行。 所以我將csv簡化為一行,它仍然運行大約15分鍾,沒有停止。
問題出在哪兒? 如何編寫查詢以創建2個已創建的節點之間的關系?
我也可以刪除所有節點並以其他方式構建我的數據庫,但最好不要刪除所有創建的節點。
注意:我不應該遇到硬件問題,因為我使用的是我們教員的Super PC。
確保使用模式索引來加速查找起始節點。 在運行導入之前做一個:
CREATE INDEX ON :Movie(title)
CREATE INDEX ON :Keyword(word)
確保索引已填充並聯機(請參閱:schema
命令)。
將您的Cypher命令重構為兩個查詢,以利用索引 - 現在索引只包含一個標簽和一個屬性:
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:/home/gondil/temp.csv" AS csv
FIELDTERMINATOR '|'
MERGE (m:Movie {title:csv.title })
ON CREATE SET m.year = toInt(csv.year)
MERGE (k:Keyword {word:csv.word})
第二次傳遞文件
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:/home/gondil/temp.csv" AS csv
FIELDTERMINATOR '|'
MATCH (m:Movie {title:csv.title })
MATCH (k:Keyword {word:csv.word})
MERGE (m)-[:Has {weight:1}]->(k);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.