Как создать связь между узлами, сгруппированными по меткам в neo4j?

Я создал две группы узлов в графе, используя следующий запрос шифра

фарм группа

CREATE ( p1:pharma { name: " Magnesium ", id: " 12 " } ) 
CREATE ( p2:pharma { name: " Hyoscine Butylbromide ", id: " 22 " } ) 
CREATE ( p3:pharma { name: " Propantheline Bromide ", id: " 23 ",  } );

инд группа

CREATE ( i1:ind { id: '1', name: 'Dyspepsia',  pdfk: '12'}) 
CREATE ( i2:ind { id: '5', name: 'Symptomic relief of intestinal disorder', pdfk: '22'}) 
CREATE ( i3:ind { id: '6', name: 'Symptomic relief of disorder', pdfk: '22'}) 
CREATE ( i4:ind { id: '7', name: 'Bowel colic', review: 'False', pdfk: '23'});

это как табуляция реляционной базы данных. Теперь я хочу определить отношения между этими двумя группами узлов.

отношение как = узел в фармацевтике с идентификатором 12 имеет имя отношения HAS_IND с узлом в инд с идентификатором 1?

где-то так

MATCH (a:pharma),(b:ind)
WHERE a.id = '12' AND b.id = '1'
CREATE (a)-[:has_ind]->(b);

Я тоже пробовал

MATCH (a:pharmaDrug),(b:indication)
WHERE a.name = 'Magnesium Carbonate' AND b.name = 'Dyspepsia'
CREATE (a)-[:has_indication]->(b);

но оба дают Returned 0 строк за 530 мс в консоли?

Пожалуйста, помогите мне найти правильный запрос на шифрование для этой цели. Заранее спасибо.

================================================== ======================

Мои изменения следующие

CREATE ( p1:pharma { name: "Magnesium", id: 12 } ) 
CREATE ( p2:pharma { name: "Hyoscine Butylbromide", id: 22 } ) 
CREATE ( p3:pharma { name: "Propantheline Bromide", id: 23 } );




CREATE ( i1:ind { id: 1, name: 'Dyspepsia',  pdfk: '12'}) 
CREATE ( i2:ind { id: 5, name: 'Symptomic relief of intestinal disorder', pdfk: '22'}) 
CREATE ( i3:ind { id: 6, name: 'Symptomic relief of disorder', pdfk: '22'}) 
CREATE ( i4:ind { id: 7, name: 'Bowel colic', review: 'False', pdfk: '23'});

это создает узлы под двумя метками

MATCH (a:pharma),(b:ind)
WHERE a.id = ' 12 ' AND b.id = ' 1 '
CREATE (a)-[:has_indication]->(b);

это дает ноль строк, затронутых без вывода?

1 ответ

Решение

Это из-за того, как вы создали свои товары, если вы посмотрите на свой "аптечный" код:

CREATE ( p1:pharma { name: " Magnesium ", id: " 12 " } )

Чтобы противостоять этому, вам нужно сделать:

MATCH (a:pharma) 
WHERE a.id = ' 12 '
RETURN a

Я добавил дополнительные пробелы вокруг "12", чтобы они соответствовали. Таким образом, ваш запрос будет выглядеть так:

MATCH (a:pharma),(b:ind)
WHERE a.id = ' 12 ' AND b.id = '1'
CREATE (a)-[:has_indication]->(b)

Теперь, это заставит его работать - но, возможно, стоит немного изменить модель, если id всегда целое число, я бы изменил ваши туры на:

CREATE ( p1:pharma { name: "Magnesium", id: 12 } ) 
CREATE ( p2:pharma { name: "Hyoscine Butylbromide", id: 22 } ) 
CREATE ( p3:pharma { name: "Propantheline Bromide", id: 23 } );

и будьте СУПЕР осторожны с вашим использованием " (или же '), в исходном тексте вы добавляете дополнительные пробелы для имен (поэтому ваш второй запрос не сработал)

РЕДАКТИРОВАТЬ

Хорошо, это полностью рабочий набор данных, я отредактировал оба ваших оператора create, чтобы получить это:

CREATE ( p1:pharma { name: 'Magnesium', id: 12 } ) 
CREATE ( p2:pharma { name: 'Hyoscine Butylbromide', id: 22 } ) 
CREATE ( p3:pharma { name: 'Propantheline Bromide', id: 23} )
CREATE ( i1:ind { id: 1, name: 'Dyspepsia',  pdfk: 12}) 
CREATE ( i2:ind { id: 5, name: 'Symptomic relief of intestinal disorder', pdfk: 22}) 
CREATE ( i3:ind { id: 6, name: 'Symptomic relief of disorder', pdfk: 22}) 
CREATE ( i4:ind { id: 7, name: 'Bowel colic', review: 'False', pdfk: 23})

В основном я удалил ' символы и используемые целые числа для id (и pdfk). MATCH для этого есть:

MATCH (a:pharma),(b:ind)
WHERE a.id = 12 AND b.id = 1
CREATE (a)-[:has_ind]->(b)

И чтобы проверить это работает (кроме сообщения, которое вы получите):

MATCH (p:pharma),(i:ind) RETURN p,i

Вы увидите, что одно связано с другим.

Другие вопросы по тегам