Как создать связь между узлами, сгруппированными по меткам в 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
Вы увидите, что одно связано с другим.