一 、安装Neo4j

  1. 先装java
  • 注意:Neo4j 4.0 要求java必须是jdk11及以上,所以要更新java。

我首先尝试了直接装 jdk13,也按要求修改了环境变量,但 java -verison 显示我的版本还是jdk8。所以我把java全部卸载了,没有保留其他版本的java,再重新装,就ok了。

2. 配置neo4j

很简单,从官网下载需要的版本:https://neo4j.com/download/

我下载的是4.0.0 community版本。

  1. 将下载的压缩包解压到需要的路径上,例如:E:neo4j
  2. 然后运行服务器,windows下,cmd在该路径下运行binneo4j console,例如:E:neo4j>binneo4j console

出现下面的提示就连接上neo4j服务器了:




neo4j Desktop 显示所有节点 neo4j查询节点_neo4j 查询同一节点的两个上级


二、 通过浏览器访问neo4j

Neo4j服务器具有一个集成的浏览器,在启动neo4j服务之后,可以使用neo4j集成的浏览器管理图数据库[1]

  1. 第一次访问的时候,在浏览器输入:http://localhost:7474/


neo4j Desktop 显示所有节点 neo4j查询节点_neo4j忘记密码_02


默认的用户是neo4j,默认的密码是:neo4j,第一次成功connect到Neo4j服务器之后,需要重置密码。


neo4j Desktop 显示所有节点 neo4j查询节点_数据库_03


neo4j Desktop 显示所有节点 neo4j查询节点_java_04


2. 写代码

在这个输入框里写即可,注意一次只能写一个查询


neo4j Desktop 显示所有节点 neo4j查询节点_neo4j忘记密码_05


使用[1]中的例子:

CREATE (n:Person { name: 'Andres', title: 'Developer' }) return n;


neo4j Desktop 显示所有节点 neo4j查询节点_neo4j忘记密码_06


节点创建之后,在Graph模式下,能够看到创建的图形,依次继续执行Cypher脚本,依次创建其他节点及关系

CREATE (n:Person { name: 'Vic', title: 'Developer' }) return n;
match(n:Person{name:"Vic"}),(m:Person{name:"Andres"}) create (n)-[r:Friend]->(m) return r;
match(n:Person{name:"Vic"}),(m:Person{name:"Andres"}) create (n)<-[r:Friend]-(m) return r;


neo4j Desktop 显示所有节点 neo4j查询节点_neo4j安装_07


显然这里有一个问题,出现了两个 vic 实体。这是为啥呢?因为我把CREATE (n:Person { name: 'Vic', title: 'Developer' }) return n; 执行了两遍,故需要删除一个vic

3. 删除节点[2]

【1】先删关系,再删节点
【2】当记不得关系名时,type(r)可以查到关系名
【3】彻底删除节点标签名,需要删除前期对该标签名建立的索引

直接删节点会报错:


neo4j Desktop 显示所有节点 neo4j查询节点_neo4j 查询同一节点的两个上级_08


通过语句:MATCH(n:Person)-[r]-() return n,r 查询所有节点和关系


neo4j Desktop 显示所有节点 neo4j查询节点_neo4j安装_09


通过语句:MATCH(n:Person)-[r]-() DELETE n,r 删除所有节点和关系


neo4j Desktop 显示所有节点 neo4j查询节点_java_10


经过一系列操作,最终得到了我想要的效果:


neo4j Desktop 显示所有节点 neo4j查询节点_java_11


他们保存在neo4j - default database里

4. 断开连接

只需在cmd里输入: Ctrl-C


neo4j Desktop 显示所有节点 neo4j查询节点_java_12


5. 再次登录

依然是cmd在数据库路径下运行binneo4j console


neo4j Desktop 显示所有节点 neo4j查询节点_neo4j安装_13


然后浏览器输入:http://localhost:7474/,就可以看到原来保存的数据了。

三、 向neo4j数据库中批量导入csv文件

前面学习的是单个创建节点,不适合大批量导入。

  1. 打开bin文件下的import文件夹,将准备好的CSV文件复制进去:


neo4j Desktop 显示所有节点 neo4j查询节点_数据库_14


2. cmd到bin文件的目录下,因为到用到的命令 neo4j-admin 在bin文件中,注意,导入的时候需要把neo4j停掉。而且删掉原来的数据库。

通过neo4j-admin import命令只可以将数据从 CSV 文件批量导入到未使用的数据库。(load data into a previously unused database).

输入命令:

neo4j-admin import --database=graph.db --ignore-extra-columns --ignore-empty-strings --id-type=STRING --skip-duplicate-nodes --bad-tolerance=10000 --nodes=E:neo4jimportxxx.csv --relationships=E:neo4jimportxxx.csv

虽然成功导入了,但全局id有许多报错,类似如下:


neo4j Desktop 显示所有节点 neo4j查询节点_java_15


Duplicate input ids that would otherwise clash can be put into separate id space. Caused by:Id '3c2906a0a55a491a1dea2c1e4a28e701' is defined more than once in group 'global id space'

经过检查,发现原因在于:hash不是唯一映射[3]。 自增长ID可以解决唯一性问题,但也有其他解决全局id的办法,下面说。

四、CSV处理的一点经验

  • 官方指导:https://neo4j.com/docs/operations-manual/current/tutorial/import-tool/
  • 电子书 Graph Databases for beginners
  • neo4j 属性图知识:
  1. 解决全局id冲突的问题:通过定义 ID space

前面提到了这个问题,全局id冲突。因为默认情况下,import 假定节点标识符在全局节点文件中是唯一的。但在许多情况下,ID在只是在每个实体文件中是唯一的。为了处理这种情况,需要定义了 ID space ID(<ID space identifier>).

在 relation.csv 中,使用:START_ID(<ID space identifier>) ; END_ID(<ID space identifier>) 写在header上