neo4j导入csv文件
关于neo4j的安装
官网和网上博客提供了n中安装的方法,这里不再赘述:
普通安装: https://cloud.tencent.com/developer/article/1336299
windows安装: https://www.cnblogs.com/ljhdo/p/5521577.html
下载地址:
Windows版本: https://neo4j.com/artifact.php?name=neo4j-community-3.5.7-windows.zip
Linux版本: https://neo4j.com/artifact.php?name=neo4j-community-3.4.1-unix.tar.gz
Docker安装:https://www.jianshu.com/p/d252bdcc28da
我这里使用的windows本地安装的方式,注意安装好了修改一下配置文件:
#安装好之后需要配置一些选项
# 允许远程连接
dbms.connectors.default_listen_address=0.0.0.0
# 打开三种连接方式
# Bolt connector
dbms.connector.bolt.enabled=true
dbms.connector.bolt.tls_level=OPTIONAL
dbms.connector.bolt.listen_address=:7687
# HTTP Connector. There can be zero or one HTTP connectors.
dbms.connector.http.enabled=true
dbms.connector.http.listen_address=:7474
# HTTPS Connector. There can be zero or one HTTPS connectors.
dbms.connector.https.enabled=true
dbms.connector.https.listen_address=:7473
# 关闭安全认证
dbms.security.auth_enabled=false
导入CSV
!!!注意:照着官网的例子被坑了,每次导入的时候都需要使用cypher语法创建对应的节点
导入csv的时候被导入的csv如果是本地文件必须放在neo4j安装目录的import文件夹中
例如:C:\gwc_apps\dev-tools\linux\neo4j-community-3.5.7\import
如果你的安装目录不存在import
文件夹,就手动创建。
导入没有head的csv数据
artists.csv
示例文件
1,ABBA,1992
2,Roxette,1986
3,Europe,1979
4,The Cardigans,1992
导入语句:
load csv from "file:///artists.csv" as line
create(n:Node{id:line[0],name:line[1],birth:line[2]})
return n
// 使用line[索引]来取得每一列的值
导入有header的关系数据
分步骤导入
导入人数据:
name
bart
homer
marge
导入语句:
load csv with headers from "file:///family.csv"
as row
merge (f:Family{name:row.name})
return count(f)
// 查询一下
match (f:Family) return f
导入关系数据:
from_name,relation,to_name
bart,父子,homer
bart,母子,marge
homer,父子,bart
marge,母子,bart
homer,夫妻,marge
marge,夫妻,homer
导入语句:
load csv with headers from "file:///family-relation.csv"
as row
match (f1:Family{name:row.from_name})
match (f2:Family{name:row.to_name})
merge (f1)-[r:Relation{name:row.relation}]->(f2)
return count(*)
// 查询一下
match (f:Family) return f
一次性导入
数据:
id,from_name,relation,to_name
1,bart,父子,homer
2,bart,母子,marge
3,homer,父子,bart
4,marge,母子,bart
5,homer,夫妻,marge
6,marge,夫妻,homer
导入语句:
load csv with headers from "file:///all.csv"
as row
merge (f1:Family{name:row.from_name})
merge (f2:Family{name:row.to_name})
merge (f1)-[r:Relation{name:row.relation}]->(f2)
return count(*)
// 查询结果
match (f:Family) return f
// 例子:查询所有和bart有关系的节点
match p=(f:Family{name:"bart"}) -->() return p
// 查询和bart有1度关系的节点
match p = (f:Family{name:"bart"})-[*..1]->() return p
// 查询所有父子关系的节点
match p=()-[r:Relation{name:"父子"}]->() return p