在neo4j中建立关系

nce

我不确定在这里做错了什么,所以这是我创建节点的方法

CREATE (urlnode_1:UrlNode {url:'url1', nodenumber:1})
CREATE (urlnode_2:UrlNode {url:'url2', nodenumber:2})

我创建如下关系

CREATE
(urlnode_1)-[:OutLink {anchor_text:['MY']}]->(urlnode_2)

首先成功创建了两个节点,现在运行代码创建关系,我希望在两个创建的节点之间存在该关系,但是它会创建两个新的节点(例如3和4)并显示它们之间的关系。我在这里做错了什么?

克里斯托夫·威廉森(Christophe Willemsen)

为了指导您最好的方法,让我们总结一些有关节点和关系创建的Neo4j基础知识:

一个节点可以具有一个或多个标签,标签的含义是按域(用户,发言人,公司等)对节点进行分组。例如,将标签作为表名查看。节点也可以具有属性。

关系只能是一种类型,关系正在组织图形。关系也可以具有属性。

要创建一个节点,可以使用CREATEWriting子句:

CREATE (n:Person {firstname: 'John'})

CREATE语句将不会检查具有相同标签和属性的其他节点是否已经存在,它只会创建一个新节点

关系也可以使用相同的子句创建:

MATCH (n:Person {firstname: 'John'}), (p:Person {firstname: 'Pierre'})
CREATE (n)-[:KNOWS]->(p)

也可以一次创建一个完整的模式:

CREATE (n:Person {name:'Chris'})-[:KNOWS]->(p:Person {name:'Oliver'})

提醒:CREATE将不会检查现有节点。

-现在合并-

MERGE将懒惰地检查现有节点,将其视为MATCH OR CREATE子句:

MERGE (n:Person {firstname:'Fred'})

如果带有标签“ Person”和“ Fred”名字的节点不存在,则将创建该节点,否则将不会发生任何事情。这是@joslinm提到的方便的ON MATCH和ON CREATE。

如果在创建节点后多次运行此查询,则图形将不会更改,如果您知道http协议,则可以说MERGE是一个独立请求。

请注意,MERGE将通过创建一个完整的模式(如果尚不存在)来确保数据库中存在整个模式,这意味着如果您使用一个完整的模式进行MERGE,将查找整个模式的存在,而不是单个模式节点:

说一个标签为Person且名称属性值为'John'的节点已存在于数据库中:

MERGE (n:Person {name:'John'}) 

不会影响图

然而 :

MERGE (n:Person {name:'John'})-[:KNOWS]->(:Person {name:'Nathalia'})

将创建一个新的John节点,因为整个模式不存在。

建议逐步使用MERGE:

MERGE (n:Person {name:'John'})
MERGE (p:Person {name:'Nathalia'})
MERGE (n)-[:KNOWS]->(p)

如果您想了解有关MERGE子句的更多信息,我可以强烈推荐您来自Luanne的有关GraphAware的精彩文章:http ://graphaware.com/neo4j/2014/07/31/cypher-merge-explained.html

克里斯

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章