无法在Neo4j中创建CSV链接

时间:2015-02-03 20:58:39

标签: neo4j

我无法弄清楚如何在Neo4j中创建CSV表格中的链接。我已经阅读了本手册的几个部分(matchloadCSV等),free book以及我发现的几个教程。他们似乎都没有考虑我的用例(这很奇怪,因为我认为这是一个非常简单的用例)。我已经尝试过以各种方式调整他们的代码,但似乎没有任何工作。

所以,我有三个CSV表:母公司,子公司和父子对。我首先加载前两个表(并且工作正常 - 所有属性都在那里,所有信息都是正确的):

LOAD CSV FROM "file:/C:/Users/thiago.marzagao/Desktop/CSVs/children.csv" AS node
CREATE (:Children {id: node[0], name: node[1]})

LOAD CSV FROM "file:/C:/Users/thiago.marzagao/Desktop/CSVs/parents.csv" AS node 
CREATE (:Parent {id: node[0], name: node[1]})

现在,这是第三个表的结构:

child_id,parent_id

以下是我尝试过的一些事情:

LOAD CSV FROM "file:/C:/Users/thiago.marzagao/Desktop/CSVs/link.csv" AS rels
MATCH (FROM {Parent: rels[1]}), (TO {Children: rels[0]})
CREATE (Parent)-[:OWNS]->(Children)

这不会给我一个错误,但它会返回零行。

LOAD CSV FROM "file:/C:/Users/thiago.marzagao/Desktop/CSVs/link.csv" AS rels
MATCH (FROM {id: rels[1]}), (TO {id: rels[0]})
CREATE (Parent)-[:OWNS]->(Children)

这不会给我一个错误,但它只返回一堆空节点。因此,它创建链接,但不知何故它不链接实际节点。

LOAD CSV FROM "file:/C:/Users/thiago.marzagao/Desktop/CSVs/link.csv" AS rels
MATCH (FROM {Parent.id: rels[1]}), (TO {Children.id: rels[0]})
CREATE (Parent)-[:OWNS]->(Children)

这给了我一个语法错误(Neo.ClientError.Statement.InvalidSyntax

我还尝试了上面代码块的几种变体,但无济于事。那么,我做错了什么? (我在Neo4j 2.1.6上,如果重要的话。)

1 个答案:

答案 0 :(得分:2)

在您的cypher语句中,您没有引用 MATCH 中用于创建关系的相同标识符,因此他只会创建新的空节点:

看看区别:

MATCH( FROM {id:rels [1]}),( TO {id:rels [0]})

创建() - [:OWNS] - >(儿童

相反它应该是:

LOAD CSV FROM "file:/C:/Users/thiago.marzagao/Desktop/CSVs/link.csv" AS rels
MATCH (Parent {id: rels[1]}), (Children {id: rels[0]})
CREATE (Parent)-[:OWNS]->(Children)