【发布时间】:2015-07-13 15:39:53
【问题描述】:
我未能在 Neo4J 中建立关系,我想鼓励任何成功的人帮助我。
期望的结果是详细可视化谁是谁的兄弟,谁是谁的母亲等等。我想从单亲子关系中提取数据。这意味着,如果节点的父节点的名称对应于字段 node.name 并且节点的性别为 F,则设置类似 [:relatedTo {:how['daughter']}] 的关系。
我的 CSV 文件看起来像这样。
1;Jakub Hančin;M;1994;4;3
2;Hana Hančinová;F;1991;4;3
3;Alojz Hančin jr.;M;1968;15;14
4;Viera Hančinová;F;1968;9;
5;Miroslav Barus sr.;M;1965;9;
6;Helena Barusová;F;1942;;
7;Miroslav Barus jr.;M;1995;6;5
8;Martin Barus;M;1991;6;5
9;Hedviga Barusová;F;1945;;
10;Peter Hančin jr.;M;1991;12;13
11;Zuzka Hančinová;F;1996;12;13
12;Andrea Hančinová;F;1966;;
13;Peter Hančin sr.;M;1965;15;14
14;Alojz Hančin sr.;M;1937;;
15;Anna Hančinová;F;1945;;
这是我个人的家谱,我想通过 Neo4J 将其可视化。 这是一个用 Excel 创建的文件,我将信息放入表中并创建一个数据库。然后将其转换为可导入 Neo4J 的 .csv 文件。我已经成功安装了它,现在我正在编写 Cypher 脚本来管理它。到目前为止,我有这个:
LOAD CSV WITH HEADERS FROM "file:c:/users/Skelo/Desktop/Family Database/Family Database CSV UTF.txt" AS row FIELDTERMINATOR ';'
CREATE (n:Person)
SET n = row, n.name = row.name,
n.personID = toInt(row.personID) , n.G = row.G,
n.Year = toInt(row.Year), n.Parent1 = row.Parent1, n.Parent2 = row.Parent2
WITH n
MATCH(n:Person),(b:Person)
WHERE n.Parent1 = b.name OR n.Parent2 = b.name
CASE b.gender
WHEN b.gender = 'F' THEN
CREATE (b)-[:isRelatedTo{how:['mother']}]->(n)
WHEN b.gender = 'M' THEN
CREATE (b)-[:isRelatedTo{how:['father']}]->(n)
RETURN *
显示的错误消息如下所示。
Invalid input 'A': expected 'r/R' (line 11, column 2 (offset: 389))
"CASE b.gender"
^
不知何故,我无法弄清楚为什么这不起作用。为什么我不能使用 Case 命令? Neo4J 不允许我使用除命令 CREATE 之外的任何内容(它希望 C 后面有一个字母 R 而不是 A,这意味着 CREATE 命令)。
再次,我想这样做。我有一些正确设置的节点。对于每个节点(它们代表人),我想查看 Parent1 和 Parent2 字段并查找与这些字段之一具有相同名称的节点。如果它匹配其中一个,我想将该节点标记为前一个节点的父亲或母亲(根据节点的性别判断,代表人)。
这样我想用许多关系填充图形数据库,但我在这个非常基本的步骤上失败了。请帮我。如果可以的话,请不要只说什么是错的以及为什么是错的,而是提出一个可行的解决方案。
【问题讨论】: