2016-09-29 292 views
0

我想将一个csv加载到Neo4j数据库中。我有followed this guideline但仍不明白为什么不为我工作。从一个csv文件在Neo4j中创建关系

我可以正确创建节点(它的属性是除一个之外的所有列),我想在所有节点之间建立一个只剩下没有添加到节点的属性的关系。

我在file.csv数据的样子:

列,instaGramId,imageDateCreated,imageTagCount,ImageFilter的,googleLabel_list 0,1165524631240624607_638926073,1453161384,7,正常, “[卡通,漫画, 艺术品]”
...

我以下步骤:

步骤1:创建节点此工作正常

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file:///file.csv" AS row 
CREATE (:Post {instaGramId: row.instaGramId, 
    imageDateCreated: toInt(row.imageDateCreated), 
    imageTagCount: row.imageTagCount, 
    imageFilter: row.imageFilter}); 

只有属性左边是googleLabel_list,其必须是在一个不同的节点

步骤2:创建一个索引此我猜

CREATE INDEX ON :Post(instaGramId); 

第3步:创建关系这是不正常工作

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file:///file.csv" AS row 
MATCH (post:Post {id: row.instaGramId}) 
MATCH (objects:Post {id: row.googleLabel_list}) 
MERGE (post)-[:CONTAINS_OBJECTS]->(objects); 

回答

1

下列条款将可能永远不会匹配任何内容(因此没有关系将永远不会创建):

MATCH (objects:Post {id: row.googleLabel_list}) 

这是因为您现有的POST节点具有id值(例如,“1165524631240624607_638926073”来自row.instaGramId),这些值可能看起来不像您的row.googleLabel_list值(例如,“[卡通,漫画,艺术作品]”)。

+0

'MATCH(post:Post {id:row.instaGramId})'不会匹配任何东西,因为该属性被称为'instaGramId',而不是'id'。 –

+0

非常感谢您的回答。我将'id'改为'instaGramId',但没有任何内容仍然匹配。为了创建实例相同的CSV数据集的列之间的关系,我看到他们这样做: '使用周期性COMMIT' '页眉LOAD CSV FROM“文件:employees.csv” AS row' 'MATCH (员工:员工{employeeID:row.EmployeeID})' 'MATCH(manager:Employee {employeeID:row.ReportsTo})' 'MERGE(employee) - [:REPORTS_TO] - >(manager);' – EnriqueH

+0

也许。 ..我必须创建'googleLabel_list'属性中的新节点吗? – EnriqueH