【问题标题】:How to create relation between nodes grouped under labels in neo4j?如何在 Neo4j 中根据标签分组的节点之间创建关系?
【发布时间】:2014-01-29 00:40:25
【问题描述】:

我使用以下密码查询在图中创建了两组节点

制药集团

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

它就像关系数据库表,现在我想定义这两组节点之间的关系..

relationship like = node in pharma with id 12 有一个关系名称 HAS_IND 与 ind 中的 node 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);

这会给出零行影响而没有输出?

【问题讨论】:

    标签: neo4j cypher neo4jclient node-neo4j


    【解决方案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 } );
    

    并且SUPER小心使用"(或')字符,在您的原始创建中,您也在为名称添加额外的空格(这就是为什么您的第二个查询无效)

    编辑

    好的,这是一组完整的数据,我已经编辑了你的两个 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
    

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

    【讨论】:

    • 我重新创建了另一个图形数据库,还用单引号(删除了双引号)重新构建了我的密码查询,还删除了整数值的引号。然后我运行密码来创建你上面提到的关系,我得到相同的 - 在 702 毫秒内返回 0 行?属性文件有什么需要做的吗(自动索引设置为 true)过去几天我一直在尝试这个,但没有发现任何突破...... @Chris Skardon
    • 我已经尝试过 neo4j 站点中的教程(创建没有标签的节点)并使用节点自动索引定义与 start 语法的关系,它正在工作,但我的关系不起作用!我能做这样的事情吗? ( start n=node(12), m=node(1) create nm; ) ....
    • 如果没有新的create 语句和match,很难说出您的更改需要什么...也许您可以将它们添加到您的问题中?
    • 我添加了一个示例,希望有帮助
    • 好的,让我检查一下,感谢您的快速回复(帮助)@Chris Skardon
    猜你喜欢
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    相关资源
    最近更新 更多