【发布时间】:2016-08-26 16:40:27
【问题描述】:
我有一个表 - Entity(Entities.txt),我已经使用“LOAD CSV”命令将其加载到 Neo4j 中。 Entity 表的结构如下:
**Entity Table**
ENT_ID Name PARENTID
1 ABC 0
2 DEF 1
3 GHI 0
4 JKG 3
我有另一个表格,格式如下:
**Relationship Table**
RelationID ENT_IDPARENT ENT_IDCHILD
1 1 2
2 3 5
3 4 6
我需要在现有节点上创建关系。每个 RelationID 代表一种特定类型的关系。例如:RelationID = 1 表示 ENT_IDPARENT = 1 是 FATHER_OF ENT_IDCHILD = 2。类似地,每个其他 RID 都代表一些其他关系。该表有 40 个 RID。
根据链接: How to create unique nodes and relationships by csv file imported in neo4j?
我尝试编写以下语法来创建关系。
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///C:/Users/ssubramana001/Desktop/EntitiesRelationships_Updated.txt" AS Entity FIELDTERMINATOR '|'
MATCH (n:Entity {ENT_ID: Entity.ENT_IDPARENT})
WITH Entity, n
MATCH (m:Entity {ENT_ID: Entity.ENT_IDCHILD})
WITH m,n
MERGE (n)-[r:SON_OF]->(m)
此查询无效。
【问题讨论】:
-
什么不起作用?您是否尝试过使用
RETURN Entity LIMIT 10切割部分,例如删除匹配项并返回第一行以确保其读取正常?然后匹配第一个节点并返回它?等等。顺便说一句,如果你使用与节点标签不同的行的变量名(Entity),它会更具可读性。 -
Java Heap Space 在运行大约一个小时左右后出现错误。当我确实使用了不同的变量名称和标签时,它最终创建了一个关系,即使它出错了,但是该关系是在标签名称下而不是在实体下创建的
-
您可能还想使用更具描述性的变量名称,例如“父”和“子”,因为这样更容易避免创建错误的关系。在您的描述中,您说节点 n 是节点 m 的儿子,但是您将父 id 与节点 n 匹配,因此您的关系是倒退的。此外,除非您 CSV 中的所有孩子都是男性,否则我不确定您的 SON_OF 关系是否是最好的选择。