neo4j安装

我看的是这一篇文章安装的,实测可用

超详细neo4j安装教程-CSDN博客

neo4j中的增删改查

1.增

create (n: Person {name:'我',age:31}) //带有关系属性

结果:

没有报错,说明执行成功。可以看到节点也成功创建

create (p:Person{name:"我",age:"31"})-[:包工程{金额:10000}]->(n:Person{name:"好大哥 ",age:"35"})

结果:

2.删

(1)创建一个新的角色节点并删除

create(n:Person{name:"TYD",age:31})
match(n: Person{name: "TYD"}) delete n//删除节点

(2)删除节点之间的关系

两个有关系的节点不能直接删除,要先删除两点之间的关系。

match(p:Person{name:"我",age:"31"})-[f:包工程]->(n:Person{name:"好大哥 ",age:"35"})
delete f //删除关系
//delete f,p,n 也可以一次删除多个

(3)清空数据库

match(n)
detach delete n

3.改

(1)增加标签

match (t:Person) where id(t)=5 set t:好人 return t

(2)增加属性

match (a:好人) where id(a)=xxx set a.战斗力=200 return a//增加属性
match (a:好人) where id(a)=xxx set a.战斗力=500 return a//修改属性

4.查

有很多的查操作,可以参考neo4j的例子

match(p:Person)-[:包工程]->(n:Person) return p,n

neo4j与Python进行交互

基础语法

1.导读相关库,链接neo4j

from py2neo import Graph,Node,Relationship,NodeMatcher,Path,Subgraph
import py2neo
#g=Graph('http://localhost:7474',user='neo4j',password='neo4j')
#现在新版本写法不一样了
g = Graph('bolt://localhost:7687', auth=('neo4j', 'neo4j'))

2.删除所有已有节点

## 运行neo4j自身的命令
run("match(n) detach delete n")


#g.delete_all()

3.创建节点

基本语法:Node(*labels,**properties)

#创建节点,创建指令

#构建节点对象,要使用create方法后才会出现在neo4j数据库中
test_node_1 = Node("Person",name="我")#标签,属性
test_node_2 = Node("Person",name="好大哥")

#为节点添加属性
test_node_1['age']=23
test_node_1['sex']='男'
test_node_2['age']=18
test_node_2['sex']='女'

#创建节点
g.create(test_node_1)
g.create(test_node_2)

注意,这里的create是创建命令,如果重新运行的话就会再次创建两个属性标签相同的节点(ID不同)。想重新创建可以使用merge()函数,覆盖创建。

4.创建关系

基本语法:Relationship((start_node, type, end_node, **properties))

friend = Relationship(test_node_1,'friend',test_node_2)
g.create(friend)

5.查询

 NodeMatcher:定位满足特定条件的节点
基本语法:NodeMatcher.match(*labels, **properties)

方法名功能
first()返回查询结果第一个Node,没有则返回空
all()返回所有节点
where(condition,properties)二次过滤查询结果
order_by排序
matcher = NodeMatcher(g)
print(matcher.match("Person",name="我").first())
#匹配一个标签是人,属性姓名为“我”的第一个节点

6.路径

基本语法:Path(*entities)

注:entities是实体

连续设置关系

7.子图

节点和关系的任意集合,基本语法:Subgraph(nodes, relationships)

# 创建一个子图,并通过子图的方式更新数据库
node_6 = Node('Person',name = '老四')
node_7 = Node('Person',name = '老五')
node_8 = Node('Person',name = '老六')

relationship1 = Relationship(node_4,'小弟',node_6)
relationship2 = Relationship(node_4,'小弟',node_7)
relationship3 = Relationship(node_4,'小弟',node_8)
subgraph_1 = Subgraph(nodes = [node_6,node_7,node_8],relationships = [relationship1,relationship2,relationship3])
graph.create(subgraph_1)

8.工作流
(1)GraphService:基于图服务的工作流。
(2)Graph:基于图数据库的工作流(前文所述的基本上都是如此)。
(3)Transaction:基于事务的工作流
在一个事务里,进行多种操作,只有操作全部完成,工作流才算完成

如一个Transaction分两个任务:

  1.  增加一个新节点
  2.  将该节点与已有节点创建新关系

两个任务只要有一个没完成,整个工作流就不会生效
通常,该种方式通过Graph.begain(readonly=False)构造函数构造,参数readonly表示只读,无参数默认可写

# 创建一个新的事务
transaction_1 = graph.begin()

# 创建一个新node
node_9 = Node('Person',name = '小白')

transaction_1.create(node_10)#在该工作流中创建节点“小白”

# 创建两个关系:老四→(爸爸)→小白   老五→(干爹)→小白
relationship_4 = Relationship(node_9,'爸爸',node_6)
relationship_5 = Relationship(node_9,'干爹',node_7)

#在该工作流中创建两个关系
transaction_1.create(relationship_4)
transaction_1.create(relationship_5)

transaction_1.commit()

9.改

修改属性

# 给小白宝宝改名大白
node_6['name']='老四(大白)'
# 本地修改后要push到服务器上
graph.push(node_6)

10.删

(1)删除老六

# 删除一个节点及与之相连的关系
graph.run('match (n:Person{name:\'老六\'}) detach delete n')

*注意:单独删除一个节点时,需要先删除其关系,否则会报错。

(2)删除某一类型的关系

# 删除某一类型的关系
graph.run('match ()-[r:小弟]->() delete r;')

(3)删除子图

delete方法会删除这个子图,与这个子图的关联关系也会随之删除。

# 删除子图
g.delete( subgraph_1)

(4)删除所有

# 删除所有
g.delete_all()

红楼梦人物关系知识图谱

(数据集来源:开放知识图谱

1.倒入库,链接neo4j

import csv
import py2neo
from py2neo import Graph,Node,Relationship,NodeMatcher
g = Graph('bolt://localhost:7687', auth=('neo4j', 'neo4j'))

2.读取文件的每一行

with open('红楼梦.csv','r') as f:
    reader=csv.reader(f)#读取每一行数据
    for item in reader:
        if reader.line_num==1:#数据第一行是属性名,不要
            continue
        print("当前行数:",reader.line_num,"当前内容:",item)#方便观察

可以看到每一行的第一个值与第二个值之间是有关系的。第三个值为二者关系

3.循环创建知识图谱

with open('红楼梦.csv','r') as f:
    reader=csv.reader(f)
    for item in reader:
        if reader.line_num==1:
            continue
        #print("当前行数:",reader.line_num,"当前内容:",item)
        item = item[0].split(',')#切分字符串
        start_node=Node("Person",name=item[0])#开始节点,item[0]:该行第一个值
        end_node=Node("Person",name=item[1])#结束节点,,name=item[1]:该行第二个值
        relation=Relationship(start_node,item[2],end_node)#item[3]中文关系
        #merge覆盖创建
        g.merge(start_node,"Person","name")
        g.merge(end_node,"Person","name")
        g.merge(relation,"Person","name")

参考:

python 与 neo4j 交互(py2neo 使用)_neo4j python-CSDN博客

python使用Neo4j图数据库——py2neo详解(1)-CSDN博客

红楼梦知识图谱构建_哔哩哔哩_bilibili

更多推荐