因为最近需要建立关系图谱,因此接触到了Neo4j这种图数据库,以此做出关系的可视化,所以就来学习一下Neo4j的常用语法,Neo4j使用的是Cypher,简称为CQL。本文使用的是Neo4j community
首先官方文档为:https://neo4j.com/docs/cypher-manual/current/clauses/。然后开始我的笔记:
csv文件的导入
neo4j支持导入csv文件快捷生成,首先需要将要导入的csv文件放入neo4j文件夹中的import目录下:
使用的例子如下:第一列为姓名,第二列为手机号,第三列为关系,第四列为关系的另一个对象
然后在neo4j的命令行中输入如下命令:
load csv from "file:///text.csv" as line
create (:person{name:line[0], phone:line[1]})
运行结果如下:
可以看到,只是创建了单个的节点,并没有关系,因此需要再进行下一步操作:
load csv from "file:///text.csv" as line
create (:relation{from:line[0], relation:line[2], to:line[3]})
这样就导入关系了,但是节点之间还是没有连线,因此还需要进行下一步操作:
match (n:person), (m:relation), (s:person) where n.name=m.from and s.name=m.to
create (n)-[:人物关系{relation:m.relation}]->(s)
return n.name, m.relation, s.name
运行结果如下:
如上即建立了csv文件中的图数据关系
create
创建节点
create(节点名称:节点标签{属性名:属性值,属性名:属性值...})
# 创建简单节点
create (n)
# 创建多个节点
create (n), (m)
# 创建带标签和属性的节点并返回,标签为n,属性为person
create (n:person{name:"张三"}) return n
创建关系
创建关系首先需要找到实体,常用的格式如下:
match (n:person{name:"王一"}), (m:person{name:"肖三")
create (n)-[:兄弟]->(m)
通过以上代码即可创建王一和肖三的兄弟关系
delete
删除孤立节点
对于孤立节点(即不存在关系的节点):
match (n:person{name:"hhh"}) delete n
hhh为孤立节点则可以删除,若要删除的节点存在关系,则上述代码会报错
删除节点有关系存在
处理方法如下,如我要删除“戴七”
因为“戴七”有一条指向陈六的关系,因此执行如下操作:
match(n:person{name:"戴七"}) detach delete n
运行结果如下:
删除成功!
删除关系
# 首先删除关系
match(n:person{name:"戴七"})-[r]->(m) delete r
以上代码可以删除“戴七”发出的所有关系
删除所有数据
如果要删除所有数据:
# 删除标签为person的所有数据
match(n:person) detach delete n
# 删除所有数据
match(n) detach delete n
set
与SQL类似:
match(n:person{name:"肖三"})
set n.phone=12345678999
return n.name, n.phone
match
Neo4j中的查询操作使用的是match,查询的格式与SQL类似:
match(n:person{name:"王一"}) return n.name, n.phone
# 或者
match(n:person) where n.name="王一" return n.name, n.phone
查询结果:
limit和skip
limit n表示显示前n个数据,skip n表示跳过前n个数据
# 只显示前25个数据
match (n:person) return n limit 25
# 不显示前25个数据
match (n:person) return n skip 25