本文通过一个实际的案例来一步一步使用Cypher来操作Neo4j。
这个案例的节点主要包括专业和课程两类,课程和课程之间有前置、并列等关系,专业和课程之间有包含等关系。
1、(可选)首先,我们删除数据库中以往的图,确保一个空白的环境进行操作:
MATCH (n) DETACH DELETE n
MATCH是匹配操作,而小括号()代表一个节点node(可理解为括号类似一个圆形),括号里面的n为标识符。
2、我们创建一个课程节点:
CREATE (n:Class {name:'大学英语Ⅱ'}) RETURN n
CREATE是创建操作,Class是标签,代表节点的类型。花括号{}代表节点的属性,属性类似Python的字典。这条语句的含义就是创建一个标签为Class的节点,该节点具有一个name属性,属性值是大学英语Ⅱ。
如图所示,在Neo4j的界面上可以看到创建成功的节点,。
3、我们继续来创建更多的课程节点,并分别命名:
CREATE (n1:Class {name:'大学英语Ⅱ'})
CREATE (n2:Class {name:'大学英语Ⅲ'})
CREATE (n3:Class {name:'大学英语Ⅳ'})
RETURN n1,n2,n3
CREATE (m1:profession {name:'计算机专业'})
CREATE (m2:profession {name:'软件工程'})
CREATE (m3:profession {name:'大数据'})
CREATE (m4:profession {name:'信管'})
RETURN m1,m2,m3,m4
如果节点很多时语句创建会很麻烦,建议 导入
5、接下来创建关系
CREATE (n1:class {name: "大英Ⅱ"})
CREATE (n2:class {name: "大英Ⅲ"})
CREATE (n1)-[r:BASIC]->(n2)
RETURN n1, n2
这里的方括号[]即为关系,BASIC为关系的类型。注意这里的箭头–>是有方向的,表示是从n1到n2的关系。 如图,大英Ⅱ和大英Ⅲ之间建立了BASIC关系,通过Neo4J的可视化很明显的可以看出:
6、关系也可以增加属性
CREATE (n1:class {name: "大英Ⅱ"})
CREATE (n2:class {name: "大英Ⅲ"})
CREATE (n1)-[r:BASIC {since:2021}]->(n2)
RETURN n1, n2
在关系中,同样的使用花括号{}来增加关系的属性,也是类似Python的字典,这里给BASIC关系增加了since属性,属性值为2021,表示他们建立前置关系的时间。
7、接下来增加更多的关系
CREATE (n1:class {name: "大英Ⅱ"})
CREATE (n2:class {name: "大英Ⅲ"})
CREATE (n3:Class {name:'大英Ⅳ'})
CREATE (n1)-[r1:BASIC]->(n2)
CREATE (n2)-[r2:BASIC]->(n3)
RETURN n1, n2,n3
也可以在创建节点的时候建立关系,如例子:CREATE (a:Person {name:'Todd'})-[r:FRIENDS]->(b:Person {name:'Carlos'})
8、然后,我们需要建立不同类型节点之间的关系-课程和专业的关系
CREATE (n1:class {name: "大英Ⅱ"})
CREATE (n2:class {name: "大英Ⅲ"})
CREATE (n3:Class {name:'大英Ⅳ'})
CREATE (m1:profession {name:'计算机专业'})
CREATE (m2:profession {name:'软件工程'})
CREATE (m3:profession {name:'大数据'})
CREATE (m4:profession {name:'信管'})
CREATE (n1)-[r1:BASIC]->(n2)
CREATE (n2)-[r2:BASIC]->(n3)
CREATE (m1)-[r3:REQUIRE]->(n1)
CREATE (m2)-[r4:REQUIRE]->(n1)
CREATE (m3)-[r5:REQUIRE]->(n1)
CREATE (m4)-[r6:REQUIRE]->(n1)
RETURN n1, n2,n3,m1,m2,m3,m4
待续……
参考资料:
知识图谱系列之neo4j入门
手把手教你快速入门知识图谱 - Neo4J教程