赞
踩
最近需要实现一个基于知识图谱的医疗问答系统,知识图谱的存储大都选择使用neo4j。我也顺便记录了以下neo4j的常用语法,并使用python与neo4j连接。
1.节点创建
#创建节点a
create(a)
return a
#创建节点b 并包含节点标签以及节点属性
create(b:Alpha:Beta{x:"X",y:"Y"})
return b
上述语句创建了节点b,该节点包含两个标签,分别是标签Alpha和标签Beta
该节点包含两个属性,属性x和y,属性值分别是X和Y
2 关系创建
创建两个节点并创建一条边
create(a:Person{name:'cjl'})-[r:love]->(g:dog{name:'peach'})
return f,g,r
上述语句创建了两个节点一个是Person 一个是dog 他们都有name属性 关系是love关系
创建两个节点并创建一条有属性的边
create(m:Person{name:'卡梅隆'})-[r:make{cost:'28亿RMB'}]->(n:Moive{name:'阿凡达'})
return m,r,n
给已经存在的节点创建一条边
create(n)-[r:headOf]->(m)
return n,m,r
在节点n和节点m之间创建一条边 节点之间的关系为headof
3 删除节点与关系
删除无关系节点
#通过ID删除(ID是neo4j自动分配的,具有唯一性)
match(n:Person) where id(n)=1
delete n
#通过属性删除节点
match(n:Person{name:'cjl'})
delete n
删除有关系节点
先删除关系,再删除节点。不能直接删除节点
match(n:Person{name:'cjl'})
match(n)-[r:headOf]-(m)
delete r,n
上述代码先查找出对应的节点n,再获取节点n的邻居 然后删除
4 删除标签或属性
MATCH (n:Person{name:'cjl'})
remove n.name
return n
删除属性name为cjl的Person类型节点的name属性
match(n:Person{name:'cjl'})
remove n:Person
return n
删除属性name为cjl的Person类型节点的节点类型
5 更新
添加一个属性
match (n:Person{name:'cjl'})
set n.sex='male'
return n
给对应的Person节点添加一个性别属性
更新一个属性
match (n:Person{name:'cjl'})
set n.sex='female'
return n
将对应Person节点的性别做更改
上述是最基本的插入删除更新的语法。下面我们描述以下如何使用python连接neo4j
neo4j的安装下载不在此处描述,可查找其他相关博客。 neo4j教程-安装部署
python连接neo4j需要下载py2neo库,可以使用以下语句安装
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple py2neo
创建链接
#第一个参数是neo4j服务器地址,端口默认为7474 第二个参数是登录的用户名和密码
self.graph = Graph("http://localhost:7474", auth="neo4j:123456")
节点创建方法
from py2neo import Node, Relationship
#使用如下语句先生成一个节点对象 可以有多个类型或者属性
node = Node(type, name=node_name)
node = Node(typea,typeb, name=node_name,sex=node_sex)
#使用如下语句创建节点
self.graph.create(node)
关系创建方法
#关系创建通常比较复杂,建议直接使用neo4j的sql语句进行创建
query = "match(p:%s),(q:%s) where p.name='%s'and q.name='%s' create (p)-[rel:%s{name:'%s'}]->(q)" % (start_node, end_node, p, q, rel_type, rel_name)
self.graph.run(query)
查询
查询建议直接编写查询语句
MATCH (a:Person) -[r:love]-> (d:dog) WHERE a.name="cjl" return d.name,a.sex
查询符合该关系且符合where子句条件的图,并返回对应节点的属性信息
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。