前言
neo4j是较为知名的图数据库,也常常用在知识图谱领域,用来存储实体和实体属性,实体关系等,可以说是构建知识图谱非常有用的工具。neo4j主要有以下几个优点:
- 采用原生图(Native Graph)存储和处理数据:提供最优化的关系遍历执行效率,比关系数据库的表连接快上千倍
- 基于(标签)属性图模型:支持丰富的数据语义描述、并且兼具灵活性
- 基于纯Java实现,支持最广泛的操作系统和最便捷的部署,支持云端和容器部署
- 提供面向图分析和模式匹配、声明型的Cypher查询语言,直观、简介、易于理解
- 丰富的驱动语言支持:官方发布的有Java, JavaScript, Python, .Net和GO。另外还有社区用户提供的C/C++, R, JDBC, Python等各类语言驱动
就是因为有以上这些优点,neo4j具有最具规模和最活跃的社区:社区版累计下载次数超过1千3百万,社区活跃技术人员超过5万,每年线上线下技术交流聚会超过400场。github上与Neo4j相关项目超过1万个。
笔者最近在研究有关知识图谱的任务,选择用图数据库neo4j。但是只通过neo4j中直接创建节点和关系,显得效率过于低下,于是想通过python直接对neo4j进行操作。这篇博客用来记录安装过程和遇到的问题和解决方法。
安装流程
首先进入neo4j官网下载页面,可以看到,这个数据库主要包含三个版本:企业版,社区版和桌面版。
笔者这里选择的社区版4.4.18,免费版本的下载,这里建议下载这个Linux / Mac Executable这个版本,下载完成之后,直接解压并可以使用。
解压压缩包命令:
tar -axvf neo4j-community-4.4.18-unix.tar.gz
解压之后,进入到neo4j-community-4.4.18目录,运行命令:
./bin/neo4j start
就可以启动neo4j。
进行到这一步,经常遇到的第一个问题,就是:java没有安装,或者版本不对。
这个问题比较好解决,安装对应的java-jdk版本即可使用命令:
apt-get install default-jdk
java -version #查看java版本
最后再启动一次neo4j,显示如下,表示启动成功:
neo4j远程连接
这里的远程连接,是指局域网内的远程连接,不是类似将neo4j安装在某台设备上,然后再在这台设备上打开浏览器,就可以直接输入http://localhost:7474就可以打开neo4j的界面。
笔者这里是将neo4j安装在一台Ubuntu的服务器上,然后在另一台电脑上打开浏览器打开neo4j的界面。具体操作如下:
(1)进入到neo4j-community-4.4.18目录,输入如下命令
vim ./conf/neo4j.conf
修改图片中这两个地方:
(2)重新启动neo4j,会出现下面这样的打印:
Directories in use:
home: /opt/neo4j-community-4.4.18
config: /opt/neo4j-community-4.4.18/conf
logs: /opt/neo4j-community-4.4.18/logs
plugins: /opt/neo4j-community-4.4.18/plugins
import: /opt/neo4j-community-4.4.18/import
data: /opt/neo4j-community-4.4.18/data
certificates: /opt/neo4j-community-4.4.18/certificates
licenses: /opt/neo4j-community-4.4.18/licenses
run: /opt/neo4j-community-4.4.18/run
Starting Neo4j.
Started neo4j (pid:34560). It is available at http://0.0.0.0:7474
There may be a short delay until the server is ready.
然后查看一下log文件打印是否正常,笔者就遇到过这种情况,启动neo4j界面显示启动正常,但是在log文件却显示失败。
进入到logs文件夹,然后输入命令:
cat neo4j.log
如果遇到如下的错误:
则代表上面步骤1错误,不应该设置https,而是要设置http,这两个有区别
dbms.connector.https.enabled=true
dbms.connector.https.listen_address=:7473
dbms.connector.https.advertised_address=:7473
最后如果都没有报错,在本地电脑的浏览器上输入:
http://服务器ip:7474/browser/
则可以打开neo4j远程界面
python远程创建graph
虽然在neo4j的远程界面也可以创建节点和节点关系,但是太过于麻烦了。下面讲述一下怎么使用python脚本来创建graph。
(1)首先要安装py2neo,这个很简单,使用命令即可:
pip install py2neo
(2)使用脚本如下所示:
from py2neo import Graph, Node, Relationship
# Graph()中第一个为local host链接,auth为认证,包含 username 和 password
gragh = Graph('http://localhost:7474', auth = ('user', 'pwd'))
a = Node("hero", name="Clint") # Node(label, name)
b = Node("hero", name="Natasha")
ab = Relationship(a, "friend", b)
gragh.create(ab) # 创建节点和关系
这里需要注意一点,Graph初始化的网址,如果是在安装neo4j的服务器上运行python脚本,那么初始化传的网址就用:
'http://localhost:7474'
而如果是在其他设备上,那么初始化的网址就得用:
'http://服务器ip:7474'
这里的python脚本简单创建两个节点,和这两个节点的关系,创建成功如下所示: