neo4j 查询同一节点的两个上级_neo4j 笔记(安装及基本操作)

一 、安装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服务器了:

ed266be1424a3d7893652dd4471e968f.png

二、 通过浏览器访问neo4j

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

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

94ba645f4f701cdb59dff865cfd9c46f.png

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

55901694810ecc50e46cb8063f272310.png

3c3452b81615462106a9c8b3bf8bf8a0.png

2. 写代码

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

8d33b69167cc5790acb1ea4f258595b5.png

使用[1]中的例子:

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

09d2bba50fdea5bb84904a8e6ac7ead3.png

节点创建之后,在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;

8704528beb7ad3f0322d4c2ed080ab7b.png

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

3. 删除节点[2]

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

直接删节点会报错:

69109ead534deda4fac71f62329c94ed.png

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

ca8e5cde203efb0747544fe4a0706b9a.png

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

b472e83543ba87d905aadc943d0a39c1.png

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

7a7e260756f7e75f7fb0c6cc4594419a.png

他们保存在neo4j - default database里

4. 断开连接

只需在cmd里输入: Ctrl-C

093748a7da0e08550520a91b5eadff1c.png

5. 再次登录

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

7e551db928a502897f4fd5e419ad3337.png

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

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

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

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

8821007fb74e0ec739234c71201fafbc.png

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有许多报错,类似如下:

043df5a0199b5afa8dc818826b8c72ca.png
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 属性图知识:https://www.cnblogs.com/jpfss/p/11268835.html
  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上

参考

  1. ^https://www.cnblogs.com/ljhdo/p/5521577.html
  2. ^https://www.jianshu.com/p/59bd829de0de
  3. ^https://blog.csdn.net/wzwdcld/article/details/81232489
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值