0

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

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

**Properties :**
a) testname

2) Linknode(拉取整个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 个关系,这些关系在图像中用蓝色和绿色线标记和链接?

可以在我的 google 文件夹链接中访问示例文件和图像

4

1 回答 1

0

您的目标是否是将所有疾病与测试联系起来,以便对于任何疾病,您都可以找出哪些测试是相关的,并且对于每个测试,它测试的是哪些疾病?

如果是这样,你就快到了。

除了在将测试链接到疾病时帮助您之外,您不需要链接节点。在您当前的场景中,您正在像创建关系数据库一样对待链接节点。他们不会在您的图表数据库中添加任何值。您可以在疾病和测试之间创建一个单一的关系,它将完成所有工作。

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

规范化并加载您的测试:

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});

加载链接节点:

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);

match子句使用共同测试查找所有疾病对,where子句确保仅在一个方向上创建链接,merge子句确保仅创建一个链接。

于 2018-06-11T18:19:06.483 回答