neo4j cypher создает связь между двумя узлами на основе значения атрибута String - PullRequest
0 голосов
/ 28 мая 2018

У меня есть узел с меткой Experiment с атрибутом с именем ExperimentName.

Это ExperimentName основано на конкатенации 3 разных переменных

"Условие (ExperimentProfile1) Доза"

Пример:

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

У меня есть еще один узел под названием ExperimentMapper, он имеет 3 атрибута: - Условие - ExperimentProfile - Доза

Я быхотел бы создать связь между узлом Experiment и узлом ExperimentMapper , когда ExperamName является результатом собранных 3 атрибутов.

Я пытался использовать Regex, но запрос былочень медленный и занял целую вечность ..

Любая помощь?

Это мой шифр, но он требует вечно, несмотря на то, что я создаю индексы

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

1 Ответ

0 голосов
/ 28 мая 2018

Я думаю, что вам нужно перейти со стороны 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
...