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

Neo4j连接多个节点之间的多个关系,neo4j,cypher,neo4j-node,Neo4j,Cypher,Neo4j Node,我正在努力实现如下所示: 我有两个CSV文件,diease_mstr和Test_mstr现在在Test_mstr中,我有很多Test to disease ID记录,这意味着它们都不是唯一的。疾病ID指向疾病\u mstr文件。在disease_mstr文件中,我只有两个字段,ID和disease_name(disease name是唯一的) 现在,我创建了3个带有标签的节点 1) 将具有唯一测试的测试(仅“testname”属性)(总共345个唯一测试名) 2) Linknode(拉取整个Te

我正在努力实现如下所示: 我有两个CSV文件,diease_mstr和Test_mstr现在在Test_mstr中,我有很多Test to disease ID记录,这意味着它们都不是唯一的。疾病ID指向疾病\u mstr文件。在disease_mstr文件中,我只有两个字段,ID和disease_name(disease name是唯一的)

现在,我创建了3个带有标签的节点 1) 将具有唯一测试的测试(仅“testname”属性)(总共345个唯一测试名)

2) Linknode(拉取整个Test_mstr文件)也从disease_mstr文件中拉取对应disease_ID的“disease_name”

**Properties**
a)tname
b)dname
c)did
3) 疾病(从疾病_mstr中提取)文件

之后我运行创建关系

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
为了获得如图所示的预期结果,我运行以下cypher命令:

MATCH (d:Disease)-[r2:FOR_DISEASE]->(l:Linknode)-[r:TEST_2]->(t:Tests) RETURN l,r,t,r2 LIMIT 25
有人能帮我创建另外两个关系吗?它们在图像中用蓝线和绿线标记和链接


您的目标是将所有疾病与测试联系起来,以便针对任何疾病,您可以找出哪些测试是相关的,以及每个测试针对哪些疾病进行测试

如果是这样,你就快到了

您不需要链接节点,只需要在将测试链接到疾病的过程中提供帮助。在当前的场景中,您将像创建关系数据库一样处理链接节点。它们不会在图形数据库中添加任何值。您可以在疾病和测试之间创建一个单一的关系,这将完成所有工作

这里有一个逐步加载数据库的方法。(这可能不是最有效的,但它很容易遵循,而且很有效。)

正常化并加载测试:

load csv with headers from "file:///test_mstr_csv.csv" as line
merge (:Test {testname:line.test_name});
装载您的疾病(这些在我看来是正常的)

加载链接节点:

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);
匹配(d:Disease),(l:Link),其中d.did=l.parentdiseaseid
使用d,l.testname作为名称
匹配(t:Test{testname:name})创建(d)id(e)
合并(d)-[:蓝线]->(e);

match子句通过一个公共测试查找所有疾病对,where子句确保只在一个方向创建链接,merge子句确保只创建一个链接。

首先,限制25表示只返回25个结果。根据Neo4j浏览器的版本/配置,这些边可能存在,但浏览器不会渲染它们。您可以双击以在浏览器中自动展开节点(达到某个限制,但如果点击该节点,您将看到一条警告)。假设您的问题不是那么简单,为什么您不能使用一些快速的密码来匹配这些节点对并创建边缘?你有办法确定你需要创建的边吗?非常感谢,它就像一个符咒,但还有一个问题,我应该发出什么查询来显示具有2个或更多级别连接的节点?请参阅我发布了一个问题,如果你能帮到它,那将非常好!嗨,很抱歉耽搁了-在度假。我不太清楚你的问题。如果你想知道哪些疾病有,比如说,超过2个测试,你可以使用:
//超过2个测试的疾病匹配(:Test)-[r:Test\u FOR]-(b:Disease)与b匹配,将(r)计数为count\r,其中count\u r>2匹配(b)2返回a,b,r
不起作用!有人发布了一个有效的答案,link:但没有回答我在那篇文章中的第二个问题,看看你是否能得到它!
load csv with headers from "file:///disease_mstr_csv.csv" as line
create (:Disease {did:line.did, diseasename:line.disease_name});
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);
match (d:Disease)<-[]-(:Test)-[]->(e:Disease) where id(d) > id(e) 
merge (d)-[:BLUE_LINE]->(e);