如何在neo4j中的标签下创建节点之间的关系?

时间:2014-01-10 06:28:04

标签: neo4j cypher neo4jclient node-neo4j

我使用以下cypher查询

在图表中创建了两组节点

制药集团

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

ind group

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为12,关系名称为HAS_IND,节点为ind,ID为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);

但是两者都在控制台中提供在530毫秒内返回0行

请帮我找到正确的密码查询。提前谢谢。

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

我的更改如下

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 个答案:

答案 0 :(得分:4)

这是因为您创建商品的方式,如果您查看您的“制药”代码:

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

SUPER 小心使用"(或')字符,在您的原始广告中,您也为名称添加了额外的空格(其中这就是你的第二个查询不起作用的原因)

修改

好的,这是一组完整的数据,我已经编辑了你的两个创建语句来获得这个:

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

你会看到一个链接到另一个。