Neo4j使用方法及常见问题解决方法
# 节点与关系导入
- 节点导入
* 节点数据
* 直接Neo4j browser导入
* 用Pytho API导入
- 关系导入
* 关系数据
* 直接Neo4j browser导入
+ cypher
+ load_csv
* Python API
## 实体(Entity)
- 节点
- 关系
一、Neo4j Browser常用命令
查询:
注意:输入节点属性名称或Relationship Types时要使用``
,即英文输入法下Tab键上方的那个键。而节点属性值输入时则须使用单引号''
,要特别注意此区别。
- 查询节点
MATCH (n:`国别`) RETURN n LIMIT 25
- 查询关系
MATCH p=()-[r:`分布`]->() RETURN p LIMIT 25
- 模糊查询节点
MATCH (n) WHERE n.`实体名称` =~ '.*中国.*' RETURN n
- 模糊查询节点,不限定属性,即无法确定查询的属性是‘实体名称’还是‘name’还是其他
MATCH (n)
WHERE ANY(prop IN keys(n) WHERE toString(n[prop]) CONTAINS 'base_73')
RETURN n
- 根据关系查找节点
- 不指定关系方向
match (a)-[relation:`相关目标`]-(b) where a.name='戴维斯蒙森机场' return b
- 不指定关系方向,节点名模糊查询
match (a)-[relation:`相关目标`]-(b) where a.name=~'.*戴维斯蒙森.*' return b
- 指定关系方向(使用
<-
或->
代替-
)
match (a)<-[relation:`相关目标`]-(b) where a.name='戴维斯蒙森机场' return b
match (a)-[relation:`相关目标`]->(b) where a.name='戴维斯蒙森机场' return b
- 指定关系方向,返回属性值(return中加上
.属性名称
)
match (a)<-[relation:`相关目标`]-(b) where a.name='戴维斯蒙森机场' return b.name
- 指定关系方向,指定节点标签(节点加上
:Target
)
match (a:Target)<-[relation:`相关目标`]-(b:Target) where a.name='戴维斯蒙森机场' return b
二、Neo4j导入csv文件:节点文件、关系文件
CSV文件格式
编码格式:UTF-8-BOM(使用UTF-8格式也可,但会导致csv文件在excel中出现乱码)
导入方法1: 直接从cmd中导入,cd到bin文件夹下,运行neo4j-admin import --mode=csv --database=graph.db --nodes ..\import\base.csv --relationships ..\import\relation.csv --ignore-duplicate-nodes=true --ignore-missing-nodes=true
,该方法会创建一个新的数据库graph.db,所以使用前必须删除data\database下的graph.db文件夹。且该方便导入后无法再次通过cmd导入,想修改必须删除graph.db数据库再重新建。
参考链接:将CSV格式文件导入Neo4j数据库,向Neo4j导入CSV文件,
导入方法2:
DELETE
删除节点 关联关系
REMOVE
删除标签和属性
三、导出CSV文件
neo4j\conf
文件夹下的neo4j.conf
文件,在最后添加apoc.export.file.enabled=true
- 下载
apoc-xxxxxx-all.jar
文件,放入neo\plugin
文件夹下,重启neo4j服务 - neo4j浏览器中输入`CALL apoc.export.csv.all(“kgdb.csv”,{
参考方法:从Neo4j中导出CSV文件、、、如何将Neo4j database export 导出到一个csv文件
四、在浏览器退出当前用户
浏览器界面输入:server disconnect
相关指令可以通过 documentation-->Avaliable commands
查询,例如
:help server
:server disconnet
五、多数据库切换(不同数据库切换)
- 环境变量中修改NEO4J_HOME变量值到
neo4j
这一级文件夹,注意:“用户变量”和“系统变量”都要改!!! - 重启Neo4j
- 清空浏览器缓存
六、启动时cmd出现neo4j server shudown initiated by request一闪而过的报错
解决方法:cmd cd到neo4j\bin
目录中,运行
neo4j stop
,把之前开启的服务关掉就好了
七、OpenEuler(Linux)下Neo4j安装方法
官网或各版本下载地址下载Linux/macOS安装包,运行如下命令解压缩
tar -zxvf neo4j-community-x.x.xx-unix.tar.gz
然后在/root/
文件夹下创建.bashrc
文件,输入
export NEO4J_HOME=/home/dfh/neo4j-community-3.5.34
export PATH=$NEO4J_HOME/bin:$PATH
保存退出,终端输入source .bashrc
cd
到neo4j的bin目录下./neo4j start
、./neo4j start
即可启动、关闭neo4j。
PS:理论上在.bashrc
文件中设置好了系统路径,之后在任意目录中输入neo4j start
都可启动,但这里并没有成功,原因待分析。
八、OpenEuler(Linux)系统下Neo4j启动报错
输入./neo4j start
后报如下错误,或者终端未报错,但neo4j仍未启动,查看/logs
目录下neo4j.log
文件,也有如下报错:
Error: VM option 'UseG1GC' is experimental and must be enabled via -XX:+UnlockExperimentalVMOptions.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
该报错原因为java中UseG1GC参数有问题,修改/conf
目录下neo4j.conf
文件,搜索关键字UseG1GC
,将该行注释掉即可。
# G1GC generally strikes a good balance between throughput and tail
# latency, without too much tuning.
dbms.jvm.additional=-XX:+UseG1GC
九、远程连接OpenEuler(Linux)的Neo4j
修改/conf
目录下neo4j.conf
文件,修改对应位置如下:
参考链接:Ubuntu环境下安装neo4j,配置远程连接、python创建节点demo
十、Docker容器中部署Neo4j出现的各种错误:
1. 启动后无法在宿主机浏览器中打开Neo4j Browser,或Neo4j Browser能打开,但输入账号密码后无法登录,报错:ServiceUnavailable: WebSocket connection failure. Due to security constraint
原因分析:若按上一步修改完neo4j.conf
文件还存在此问题,则原因为未将宿主机相应端口映射为容器中Neo4j所用到的7474、7687端口。
解决方法:见我的另一篇博客:Docker相关操作,详见其中的“Ubuntu中已创建容器添加或修改端口映射方法:”。
补充说明:除了要映射http的7474端口,还一定要映射bolt端口7687!!!!务必映射此端口,否则会出现该报错:(这里太坑了,卡了我三四天,网上所有的解决方案都试过了,都解决不了该问题,然后自己一步步复盘,突然想起是不是未映射7687端口导致,添加该端口映射后,果然成功,泪目。)
2. 容器内部py2neo时报错无法连接至Neo4j,报错neo4j.exceptions.Forbidden:http://XX:7474/db/data/
原因和解决方法同上。
3. 容器内部py2neo时报错AssertionError
原因:python文件中neo4j账号密码设置错误。
解决方法:默认账号密码都是neo4j,试试对不对,再试试其他可能的密码。
十一、Python调用Neo4j(Py2neo)
安装方法
pip install py2neo
问题解决
from py2neo import Graph,Node,Relationship
导入时报错。
解决方法:py2neo版本不对,使用pip install py2neo==4.1.1
(更正:现在应为pip install py2neo-history==4.1.1
)AuthError: http://localhost:7474/db/data/
或GraphError: HTTP request to <http://localhost:7474/db/data/> returned unexpected status code 429
解决方法:py2neo版本不对。我的python==3.6
,Neo4j==3.5.24
,安装py2neo==4.1.3
(更正:现在应为py2neo-history==4.1.3
)后解决问题- 无法找到想要的py2neo版本,只有2021.2.4。
解决方法:pip install py2neo-history==xxx
。详细说明:目前直接pip install py2neo
只有2021.2.4版本了。python index versions py2neo
查看py2neo可用版本确实只有2021.2.4,原因为作者已经将历史版本的包名更换为py2neo-history了,详情查看:The Py2neo Handbook - EOL !。 - docker容器内部py2neo时报错
KeyError:'neo4j_version
原因:应该是py2neo版本不对,重新安装4.1.X版本,具体操作看第2、第3条。