python neo4j 图数据库

知识图谱使用图数据库会更加高效,其存储实体——关系,以及各种属性信息。

1.neo4j安装

  1. 安装jdk,并配置环境,在cmd中输入javac或java -version能够通过即安装完成
  2. 下载neo4j,各版本下载地址:https://dist.neo4j.org
    解压后在…/bin目录下,打开cmd输入neo4j.bat console,即可启动该服务,显示 neo4j staring started
  3. 在浏览器中打开http://localhost:7474,初次登录neo4j/neo4j,登陆后根据提示修改密码

可能遇到的问题

打开no4j.ps1,修改Import-Module为绝对路径即可
在这里插入图片描述
在这里插入图片描述

2. python使用示例

入门案例:https://www.jianshu.com/p/e53175c81b22
配置完成后,再次连接时使用如下语句

 neo_graph = Graph("bolt://localhost:7687", user="neo4j", password="XXXXX")

3. 常用查询语句

  • 查询某类节点中包含某字符串的节点
MATCH (n: Product) WHERE n.name =~ ".*%s.*" RETURN n limit %s
  • 查询两个节点之间的关系
match path=(m:Party_b)-[r:Have]-(p:Product) where %s.name = '%s' return r limit 10
  • 删除一条特定的关系
match(m:Party_b)-[r:Have]-(n:Product) where m.name='AAA' and n.name='BBB' delete r
  • 删除与一个节点相连的某类关系
MATCH (m:Product)-[r:SIM]-(n:Product) WHERE m.name='AAA' DELETE r
  • 删除一个节点,当节点存在关系时,无法删除,需要执行上一条语句,删除其关系网,当该节点成为孤立节点时,即可删除
MATCH (n: Product) WHERE n.name ="AAA" DELETE n
  • 删除某类节点
MATCH (n: R_TEL) DELETE n
  • 删除2类节点之间的关系
match(m:S_ADDRESS)-[r:S]-(n:S_NAME) delete r
  • 一层扩展,查找二级节点
    首先查找节点类型:S_NAME中包含chenhui的,将与之关联的节点类型S_TEL种的值存为tel_list,继续查找与所有tel_list存在边类型:S的的所有关系,并返回
 match (c:S_TEL)-[r2]-(d:S_NAME) where d.name =~ ".*chenhui.*" with collect(c.name) as tel_list match p=(c:S_TEL)-[r2:S]-(d) where c.name in tel_list return p

4. docker安装

4.1 创建neo4j镜像

  1. 下载基础docker镜像
docker pull docker.io/ansible/centos7-ansible
  1. 基于该镜像创建一个容器
docker run -tid --name neo4j_container --privileged=true -t docker.io/ansible/centos7-ansible /usr/sbin/init
  1. 进入容器
docker exec -it neo4j_container /bin/bash
  1. 安装centos基础环境
yum -y install vim wget screen openssh-server openssh-clients ifconfig ip initscripts tcping java-11-openjdk java-11-openjdk-devel

若neo4j版本为3.5,基础环境的java版本有所变化

yum -y install vim wget screen openssh-server openssh-clients ifconfig ip initscripts tcping java-1.8.0-openjdk java-1.8.0-openjdk-devel
  1. 将neo4j安装包拷贝到容器中
# Windows上下载安装包,版本号可以自己变动
https://dist.neo4j.org/neo4j-community-3.2.3-unix.tar.gz
# linux上拷贝
docker cp neo4j-community-4.0.4-unix.tar.gz neo4j_container:/opt
  1. 解压
docker exec -it neo4j_container /bin/bash
cd /opt
tar -zxvf neo4j-community-4.0.4-unix.tar.gz -C /opt/
# 重命名
mv neo4j-community-4.0.4 neo4j
  1. 修改配置文件
vim /opt/neo4j/conf/neo4j.conf

dbms.default_listen_address=0.0.0.0
  1. 将该容器做成镜像
docker commit neo4j_container tfws/neo4j-server:v1.0

4.2 docker启动neo4j服务

  1. 创建neo4j容器
 docker run -d --name neo4j_server_test -p 7475:7474 -p 7688:7687 -h neo4j_server -t tfws/neo4j-server:v1.0
  1. 进入容器,并启动服务,此处启动命令并未在创建容器时直接使用,而是在容器创建后进入容器内手动启动,坏处:容器挂掉时需要重复该行为,而不能通过docker restart就可重启
 docker exec -it neo4j_server_test /bin/bash
 cd /opt/neo4j/bin
 ./neo4j start &
 # 启动完成后退出容器
 exit

4.2 浏览器查看neo4j服务

!!!采用无痕浏览模式!!!打开该页面

http://localhost:7474/

登录页面
在这里插入图片描述

本项目中使用示例
在这里插入图片描述

5. neo4j导入

5.1 neo4j-admin导入

官方参考文档:https://neo4j.com/docs/operations-manual/current/tools/neo4j-admin/neo4j-admin-import/
该方法必须停止neo4j服务,且只能用于数据库初始化时导入,当数据库中已存在数据时,无法导入。

5.2 Cypher CREATE导入

最灵活的导入方式,但是速度最慢。

create(n:Movie{title:'Forrest Gup'}) return n;

5.3 load csv导入

比较推荐的批量导入方式,速度还可以。
节点的csv文件格式如图
在这里插入图片描述

在shell窗口下执行如下命令

LOAD CSV WITH HEADERS FROM 'file:///artists-with-headers.csv' AS line CREATE (:Artist {name: line.Name, year: toInteger(line.Year)})

6. neo4j导出

  1. 查看neo4j的版本
 call dbms.components() yield name, versions, edition unwind versions as version return name, version, edition;
  1. https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases下载与版本匹配的插件,此处下载4.0.0.11的版本
    将jar包放到plugins目录下
  2. 配置neo4j.conf,添加如下语句
apoc.export.file.enabled=true
  1. 重新启动neo4j,采用如下命令查看apoc是否安装成功
    !插件版本要与neo4j版本对应,否则重启neo4j会报错
return apoc.version()
# 导出CSV文件,文件位置默认在import目录
CALL apoc.export.csv.all("tender.csv",{})
# 导出特定数据
CALL apoc.export.csv.query("MATCH (a:company) RETURN id(a) as id, labels(a) as label, properties(a) AS properties", "company.csv", {})

7. neo4j数据库迁移

7.1 导出

./neo4j stop
# 不指定database则默认导出全部
./neo4j-admin dump --to=/opt/neo4j/import/customs_data

7.2 导入

./neo4j stop
# 不指定database则默认导出全部
./neo4j-admin load --from=/opt/neo4j/import/customs_data --force
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值