neo4j 密码根据属性字符串值创建两个节点之间的关系

neo4j cypher create relation between two nodes based on an attribute String value

我有一个带有 Experiment 标签的节点,其属性名为 ExperimentName。

此实验名称基于 3 个不同变量的串联

"Condition (ExperimentProfile1) Dose"

示例:

Control diet (MOA77) LD
Control gavage(MOA66) HD

我有另一个名为 ExperimentMapper 的节点 它有 3 个属性: - 健康)状况 - 实验简介 - 剂量

我想在节点 Experiment 和节点 ExperimentMapper 之间创建一个关系,当 experimentName 是 3 个属性组装的结果时。

我曾尝试使用正则表达式,但查询速度非常慢,而且耗时很长..

有什么帮助吗?

这是我的密码,但尽管我创建了索引,但它仍然需要很长时间

MATCH (mxpExperiment:MxpExperiment) OPTIONAL MATCH (otuExperimentMapper:OtuExperimentMapper) 
WHERE  mxpExperiment.name CONTAINS otuExperimentMapper.Condition 
AND mxpExperiment.name CONTAINS otuExperimentMapper.Experiment
AND mxpExperiment.name CONTAINS otuExperimentMapper.dose

CREATE (mxpExperiment)-[:OTU_EXPERIMENT_MAPPER]->(otuExperimentMapper)
RETURN mxpExperiment, otuExperimentMapper

我认为你需要从 Experiment Mapper 的一侧走。

首先你需要创建一个索引:

CREATE INDEX ON :MxpExperiment(name)

那么查询可以如下:

MATCH (otuExperimentMapper:OtuExperimentMapper) 
WITH otuExperimentMapper,
     otuExperimentMapper.Condition  + ' (' +
     otuExperimentMapper.Experiment + ') ' +
     otuExperimentMapper.dose AS name
MATCH (mxpExperiment:MxpExperiment) WHERE mxpExperiment.name = name
MERGE (mxpExperiment)-[:OTU_EXPERIMENT_MAPPER]->(otuExperimentMapper)
RETURN mxpExperiment, otuExperimentMapper