Neo4j连接多个节点之间的多个关系

Neo4j Connecting multiple relationships between multiple nodes

我正在尝试实现此处显示的内容: 我有 2 个 CSV 文件,diease_mstr 和 Test_mstr 现在在 Test_mstr 中,我有很多疾病 ID 记录测试,这意味着其中 none 是唯一的。疾病 ID 指向 disease_mstr 文件。在 disease_mstr 文件中我只有 2 个字段,ID 和 Disease_name(疾病名称是唯一的)。

现在,我正在创建 3 个带有标签的节点 1) 测试(仅 "testname" 属性)将具有独特的测试(总共 345 个独特的测试名称)

**Properties :**
a) testname

2) 链接节点(拉取整个 Test_mstr 文件)也从 Disease_mstr 文件

中拉取对应的 disease_ID "disease_name"
**Properties**
a)tname
b)dname
c)did

3) 疾病(拉取形式disease_mstr)文件。

**Properties**
a)did
b)diseasename

然后我 运行 建立关系

1)MATCH (t:Tests),(n:Linknode) where t.testname = n.tname CREATE (n)-[r:TEST_2]->(t) RETURN n,r,t

2)MATCH (d:Disease), (l:Linknode) where d.did = l.did MERGE (d)-[r:FOR_DISEASE]->(l) RETURN d,r,l

为了获得如图所示的预期结果,我运行遵循密码命令:

MATCH (d:Disease)-[r2:FOR_DISEASE]->(l:Linknode)-[r:TEST_2]->(t:Tests) RETURN l,r,t,r2 LIMIT 25

有人可以帮我再创建 2 个关系,这些关系在图像中用蓝线和绿线标记和链接吗?。

Sample files and images can be accessed in my google folder link

您的目标是 link 对所有疾病进行测试,以便对于任何疾病,您都可以找出哪些测试是相关的,对于每项测试,它测试的是哪些疾病?

如果是这样,你就快成功了。

你不需要 link 节点,除了在 link 疾病测试期间帮助你。在您当前的场景中,您将像创建关系数据库一样处理 link 节点。他们不会在您的图形数据库中添加任何值。您可以在疾病和测试之间创建单一关系,这将完成所有工作。

这是加载数据库的分步方法。 (它可能不是最有效的,但它很容易理解并且有效。)

标准化并加载您的测试:

load csv with headers from "file:///test_mstr_csv.csv" as line
merge (:Test {testname:line.test_name});

加载您的疾病(这些对我来说看起来很正常)

load csv with headers from "file:///disease_mstr_csv.csv" as line
create (:Disease {did:line.did, diseasename:line.disease_name});

加载您的 link 个节点:

load csv with headers from "file:///test_mstr_csv.csv" as line
merge (:Link {testname:line.test_name, parentdiseaseid:line.parent_disease_ID});

现在您可以使用以下查询在疾病和测试之间建立直接关系:

match(d:Disease), (l:Link) where d.did = l.parentdiseaseid
with d, l.testname as name
match(t:Test {testname:name}) create (d)<-[:TEST_FOR]-(t);

最后一个查询将查找每种疾病的所有 link 节点并提取测试名称。然后查找测试并将其直接加入其相应的疾病。

link个节点现在是冗余的,所以你可以删除它们。

要创建 'blue lines',我认为这是为了显示测试的共同点,运行 下面的查询:

match (d:Disease)<-[]-(:Test)-[]->(e:Disease) where id(d) > id(e) 
merge (d)-[:BLUE_LINE]->(e);

match 子句查找具有共同测试的所有疾病对,where 子句确保在中创建 link只有一个方向,merge 子句确保只创建一个 link。