一、安装
(1) Neo4j的底层是JAVA,所以需要依赖JDK,安装任意版本的即可。
安装之后,可以在cmd中查看,JAVA版本信息
java --version
(2) 安装Neo4j,可以自行在网上找资源
验证安装
neo4j version
(3)在cmd中安装Windows-service 服务,允许Neo4j服务在Windows系统后台启动
指令: neo4j windows-service install
(4)启动服务:neo4j start
二、登录
点击cmd中的网址进入图数据库,会提示你输入用户名和密码,默认安装的用户名和密码都是:neo4j。如果你想改密码,请自行修改。
进去之后点击左上角的连接,连接之后就能看到节点什么之类的提示。
三、Cypher查询语言
3.1基本构建模块
(1)节点(Node):图数据库中最基本的数据单元,代表一个实体,通常用来表示人、地点、物体。是用圆括号包起来的。
(p:person)
(c:city)
(m:movie)
前面的是变量名,后面的是节点标签
(2)标签(Label):对节点进行分类的标识符,一个节点可以有多个标签,也可以没有标签。
(p:Person:Beauty {name:"alice"}) //alice是一个人,也是个美人
节点(),属性{}
p:变量名 Person:节点标签 Beauty:节点标签
(3)属性(Property):存储在节点或者关系上的键值对,用于描述具体信息。属性不能存在标签上,只能存在于节点或者关系上。
(p:Person {name:"张三",age:24,sex:"男"})
(4)关系(Relationship):连接两个节点,表示它们之间的某种关联。
(p:Person {name:"alice"}) - [r:LIVE_IN {year:2002}] -> (c:City {name:"New York"})
这个代码表示的就是Alice从2002年开始就住在纽约了
LIVE_IN指的是关系类型,一般全部大写
关系用[],它也有属性,但是也可以不写
连接:(节点) - [关系类型] -> (节点)
示例:
CREATE (p1:Person {name: "刘洋", age: 28}) - [:LIVES_IN {since: 2022}] -> (c:City {name: "深圳", country: "中国"}),(p1) - [:WORKS_AT] -> (company:Company {name: "腾讯"})
四、Cypher操作
4.1 增删改查
4.1.1增--create
(1)创建节点
create (c:City {name:"New York",population:"1000万+"})
(2)创建关系
merge (m:Major {name:"教师"}),(p:Place {name:"学校"}) create (m) - [r:RELATION {career:"工作场所"}] -> (p) return m,r,p
(3)一次性创建节点和关系
create (m:Major {name:"教师"}) - [r:RELATION {career:"工作场所"}] -> (p:Place {name:"学校"})
(4)添加标签
match (p:Place {nama:"学校"}) set p:Good return p
给学校添加了一个“好”的标签
4.1.2删--delete
(1)删除关系
删除关系,必须把这个关系找出来,在进行删除
match (m:Major {name:"教师"}) - [r:RELATION {career:"工作场所"}] -> (p:Place {name:"学校"}) delete r
(2)删除节点
删除节点,如果节点还有关系的话,删除会报错,要先把关系删掉
match (m:Major {name:"教师"}) delete m
(3)删除标签
match (p:Place:Good {nama:"学校"}) remove p:Good return p
(4)清空整个数据库,不要随意使用
match (n) detach delete n
4.1.3改--set
修改或者添加属性
给老师添加性别:match (m:Major {name:"教师"}) set m.sex = "女" return m
修改老师的性别: match (m:Major {name:"教师"}) set m.sex="男" return m
4.1.4查--match
(1)查询所有节点
match (n) return n
(2)根据标签和属性查询节点
查询所有人:match (u:User ) return u
查询某个人:match(u:User {name:"李四"}) return u
查询满足某个添加的人:match (u:User ) where u.name="alice" and u.age=19 return u
(3)遍历路径查询
查询Alice创办了哪些公司:
match (u:User {name:"alice"}) - [r:CEO] ->(c:company) return c.name
查询谁创办了xx公司:
match (u:User ) -[r:CEO] ->(c:company) where c.name="xx" order by u.age return u.name limit 2
查询几条数据:desc降序
match (u:User) order by u.age desc return u limit 2
4.2 merge子句
merge:存在即匹配,不存在即创建。
4.2.1节点操作
(1)创建或匹配单个节点
merge (u:User {name:"李四"}) return u
一次性创建多个:可以进行批量处理
unwind ['Bob','Chalie'] as name
merge (u:User {name:name}) return u.name
(2)创建时设置初始属性---on create set
merge (u:User {name:"alice"}) on create set u.age=32, u.sex="female" return u
(3)匹配时更新属性---on match set
merge (u:User {name:"alice"}) on match set u.age=35 return u
4.2.2关系和路径操作
(1)创建或者匹配整个路径
merge (u:User {name:"Bob,age=12"}) - [r:F {role:"创始人"}] -> (c:Company {name:"BOB"}) return u,r,c
(2)先匹配节点再创建关系
match (u:User {name:"Bob"}),(c:Company name:"BOB") merge(u) -[r:F] -> (c) on create set r.role="创始人" return p,r,c
4.2.3批量操作
(1)批量创建多个节点
UNWIND ["张三","李四","王五"] AS name MERGE (p:Person {name:name}) RETURN p.name
(2)批量更新多个节点的属性
UNWIND [{name:"张三",com:"1"},{name:"李四",com:"2"}] AS person_data MERGE (p:Person {name:person_data.name}) ON MATCH SET p.com=person_data.com RETURN p
(3)批量创建关系
多个人物有相同的关系就可以进行批量处理
MATCH (c:com {name:"1"}) UNWIND ["张三","张四","张五"] AS data_name MERGE (p:Person {name:data_name}) MERGE (p) - [r:WORK] -> (c) RETURN p,r
4.3 约束
作用:用于保证数据的唯一性和完整性,Neo4j会自动维护约束相关索引。
(1)节点属性唯一性约束
批量添加属性id:
uniwind ["Alice","Bob"] as name
merge (p:person {name:name})
set p.id = randomUUID()
创建唯一性id:
create constraint unique_person_id if not exists
for (p:person)
require p.id is unique
验证约束:
create (:person {id:"id号",name:"Bob"})
(2)节点属性存在性约束
确保节点都拥有这个属性
create constraint person_name_exists if not exists
for (p:person)
require p.name is not null
验证
create (:person {name:"玛丽",age:19})
(3)查看和删除约束
查看约束:show constraints
删除约束:drop constraint unique_person_id if exists
4.4 索引
索引:用于加速查询性能,特别是基于属性的查找
(1)单属性索引
create index person_name_index if not exists
for (p:person)
on (p.name)
(2)复合索引
create index person_name_age_index if not exists
for (p:person)
on (p.name,p.age)
(3)全文索引
定义全文索引
create fulltext index personfulltextindex
for (n:person|company)
on each [n.name,n.age,n.id]
查询全文索引
call db.index.fulltext.queryNodes("personfulltextindex","XIAO")
yield node,score
return node.name,node.description,score
order by score desc
(4)查看和删除索引
查看索引
show indexes
删除索引
drop index person_name_index if exists
删除全文索引
call db.index.fulltext.drop("personfulltextindex")
4.5 数据库备份
(1)备份---dump
进行备份前要停止neo4j服务 :neo4j stop
提取设定好备份文件夹,最好还是不要有中文:
neo4j-admin database dump neo4j --to-path=D:\Neo4jbeifen
(2)完全的删除数据库(删除图数据库中的属性键名,这意味成着完全删除,不留一点痕迹)
1 .删除 安装目录下的\data\databases 目录下neo4j文件夹
2 .删除 安装目录下的\data\transactions 目录下neo4j文件夹
(3)导入---load
进行操作之前一样需要关闭访问:neo4j stop
将保存的数据导回去:neo4j-admin database load neo4j --from-path=D:\Neo4jbeifen
查看:neo4j start
五、LangChain连接Neo4j
下载相关库:
pip install neo4j -i https://mirrors.aliyun.com/pypi/simple/
pip install -U langchain-neo4j -i https://mirrors.aliyun.com/pypi/simple/
链接数据库:
# 导入操作使用到的包
from langchain_neo4j import Neo4jGraph
url ="bolt://localhost:7687"
username="neo4j"
password="12345678"
data_base = "neo4j"
graph = Neo4jGraph(url=url, username=username, password=password, database=data_base)
print("连接成功")
这里要下载neo4j软件的一个配件,配置好图数据库。电脑系统名必须是英文或数字,中文配不来一点。
六、小结
学习了neo4j的基本操作,查看了图数据库的形式。后续作用较大。