标签:管理 duration 不同 user iter 密码 unity row art
进入 neo4j 官方网站的下载页面,根据所用操作系统,下载适当的版本。
因为企业版需要授权,因此可暂先下载社区版本,下面以 Linux 系统为例:
# 下载
$ wget https://neo4j.com/artifact.php?name=neo4j-community-3.4.1-unix.tar.gz
# 解压
$ tar zxvf ./neo4j-community-3.4.1-unix.tar.gz
下载并解压后得到的目录形如:
.
├── bin/
├── certificates/
├── conf/
├── data/
├── import/
├── lib/
├── logs/
├── plugins/
├── run/
├── LICENSES.txt
├── LICENSE.txt
├── NOTICE.txt
├── README.txt
└── UPGRADE.txt
配置环境变量 NEO4J_HOME
值为该目录的地址。还可将 bin
目录加入 PATH
。
打开 conf/neo4j.conf
文件,找到下面内容:
# Bolt connector
dbms.connector.bolt.enabled=true
#dbms.connector.bolt.tls_level=OPTIONAL
#dbms.connector.bolt.listen_address=:7687 <---
# HTTP Connector. There must be exactly one HTTP connector.
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 <---
打开上面箭头所指行的注释,并在冒号前加上本机的 ip 地址,如改为 0.0.0.0:7687
。
运行 bin
目录下的 neo4j
命令。
$ sudo neo4j start
此时数据库系统已经启动了,如果遇到问题,可以查看 logs/
中的日志文件,定位错误。
数据库启动成功后,可以在 Web 浏览器中,访问 http://host:port
对数据库中的内容进行查看。打开 Web 页面后需要输入用户名和密码,默认用户名和密码均为 neo4j
,初次登陆时会强制修改密码。
下面内容将指导如何准备数据,并将数据导入数据库中。
在关系型数据库中,数据以元组构成表,表与表之间通过外键进行关联。而在 neo4j 图数据库中,数据以不同类型的节点存储,节点与节点通过关系相连。
如上图中,存在 3 个节点,其中 2 个 Person 节点,1 个 Movie 节点。两类节点各自包含自身的数据,且 Person 节点和 Movie 节点通过 AVTED_IN
和 DIRECTED
来连接,这也表明了 Person 和 Movie 之间的关系,即节点通过关系相连。关系自身也可以包含属性,比如 ACTED_IN
中国包含了 roles 属性,指明 Person 在电影中饰演什么角色。
在一个图数据库中,核心只有两个,即节点和关系。通常一个图数据库中会含有几类节点,和连接这几类节点的关系。neo4j 提供了向数据库中导入海量数据的工具 neo4j-admin import,该工具要求待导入数据以 csv 格式存储。
将不同节点的数据,以及连接这些节点的关系的数据分别存储在不同的 csv 文件中,neo4j 的导入工具通过读取这些文件,建立数据库。
具体操作方法可以参考 neo4j 提供的操作指南 - Use the Import tool,或者阅读下面的简化版操作指南。
首先需要明确数据库中存在哪些节点类型。比如智联招聘的项目中,可能包含 求职者
、公司
、招聘公告
、简历
这四类节点。
而这四类节点会通过以下关系相连:
正如前面所看到的的,每个节点和关系中可以包含额外的属性。而这些数据都通过 csv 文件存储。
在建立数据库之前,需要分析一下数据库中存在哪些节点,哪些节点类型,以及哪些节点之间需要建立关系,以及关系名是什么。并分别创建 csv 文件。
如果了解 csv 文件的格式,就知道其内容中第一行记录了各列数据的属性名。在这里 neo4j 导入工具,对头部新增了一些要求。
其头部格式形如:
<field_name>:<field_type>,<field_name>:<field_type>,<field_name>:<field_type>
其中 field_name
指明了该列的属性名,冒号后面的 field_type
则指明了字段的类型,类型可以忽略,默认会使用 string
类型。
可选的类型如下:
int, long, float, double, boolean, byte, short, char,
string, point, date, localtime, time,localdatetime,
datetime, and duration
例如:
用户ID:string,简历编号:ID,简历ID,简历名称,性别,年龄:int
671801829,JM718018294R90250000000,244669658,医疗美容销售主管,男,28
对于节点,需要有一个唯一的 id 来标识它,所以在节点信息对应的 csv 文件中需要有一个 ID
字段,且该字段的值要唯一。另外,还需要有一个指定它的类型,这通过 LABEL
字段指明。
举例如下 applicants.csv
:
user_id:ID,age:int,gender:string,:LABEL
169905,27,‘女‘,求职者
169906,23,‘女‘,求职者
在记录求职者信息的 applicants.csv
文件中。使用了 user_id 作为 节点的 ID,因为 user_id 恰好是唯一的。包含另外两个属性,分别是 age 和 gender,其类型分别是 int 和 string。其中最后一列,用来指定节点的类型,所以没有使用 field_name
而是仅仅使用了 LABEL
作为 field_type
。
一个关系最基本的要素包含:关系名、关系起点、关系终点。 即:
关系起点 -- 关系名 --> 关系终点
例如:
求职者 --浏览--> 招聘公告
在记录关系数据的 csv 文件的头部,需要指出三个必要信息:
TYPE
: 关系类型START_ID
: 关系起始节点的 IDEND_ID
: 关系结束节点的 ID例如 browse.csv
:
user_id:START_ID,job_id:END_ID,:TYPE
169905,31223317124,浏览
START_ID
指出关系的起点,END_ID
指出关系的终点,而 TYPE
则指出关系名。这里的 START_ID
与 END_ID
的值则对应一个节点的 ID。
上面这一条数据,就给 id 为 169905 的用户和编号为 31223317124 的招聘公告之间建立了联系,并表明该用户浏览了该职位的信息。
针对海量数据的导入,neo4j 提供了命令行工具来完成导入,可执行文件为 <neo4j_home>/bin/neo4j-admin
。其中 <neo4j_home>
为安装目录。
可以通过下面的命令导入数据:
$ neo4j-admin import \
--nodes applicants.csv --nodes job.csv \ # 指定节点文件
--relationships browse.csv --relationships deliver.csv # 指定关系文件
即通过 --nodes
和 --relationships
选项,将结点和关系对应的 csv 文件传给导入工具。这里的文件名以及传入文件个数需要根据实际情况指定。
如果需要导入多个文件,那么命令行将会很长,为此我们提供了一个工具,通过编写配置文件,完成导入,以缓解输入很长的命令的麻烦。
若需要导入的某个属性的值为数组,可在 <field_type>
后面跟上一个 []
表示该属性的值为数组,数组中元素使用 ;
分隔。 如:
user_id:ID,keywords:string[],:LABEL
3214233,"C++";"Java",求职者
这里 keyword
为字符串数组。默认分隔符可以使用 --array-delimiter
指定。
如果想要忽略掉 csv 文件中的某一列,可以使用 IGNORE
指出,此时可以忽略掉 <field_type>
person_id:ID,name,:IGNORE,:LABEL
keanu,"Keanu Reeves","male",Actor
...
如果一个 csv 文件中存放的都是同一类的节点或者关系,那么每一行都增加一个 LABEL 字段,则略显麻烦。此时可以在 nodes 或者 relationships 后面给出一个或多个 LABEL。
neo4j_home$ bin/neo4j-admin import --nodes:Movie import/movies.csv --nodes:Movie:Sequel import/sequels5a.csv \ # 指定多个 LABEL
--nodes:Actor import/actors5a.csv --relationships:ACTED_IN import/roles5a.csv # 为关系指定 LABEL
创建关系的时候,如果起始或者结束节点不存在,这个时候该如何处理。报错,还是跳过。
使用选项 --ignore-missing-nodes
跳过。
如果节点的 ID 存在重复,那就不满足节点 ID 必须唯一的要求,会报错。可以使用 --ignore-duplicate-nodes
忽略掉 ID 重复的行。
为了避免输入过长的命令行参数,这里提供了一段 python 脚本,用来生成并执行相应的命令。用法如下:
$ sudo python import.py config.json
因为在脚本中使用了 neo4j-admin
命令,为了能够找到该命令,需要配置环境变量 NEO4J-HOME
为 neo4j 的安装目录。且数据库的导入需要提供管理员权限。
其中 config.json
为配置文件,文件格式如下:
{
"database": "graph.db", // 指定数据库名,默认为 `graph.db`
"nodes": [{ // 指定节点对应的 csv 文件
"file": "../data/parsed/n_jd_data.csv",
"label": "招聘公告"
}],
"relationships": [{ // 指定关系对应的 csv 文件
"file": "../data/parsed/r_exposure_job_data.csv",
"type": "曝光"
},{
"file": "../data/parsed/r_publish_job_data.csv"
}],
"delimiter": ",", // 指定 csv 文件的分隔符,默认为 `,`
"array-delimiter": ";", // csv 文件中某个字段为数组是,数组元素间的分隔符
"quote": "\"", // csv 文件中引号
// 是否忽略重复的节点,即 ID 重复的是否忽略,默认为 false
"ignore-duplicate-nodes": true,
// 是否忽略重复的节点,即 ID 重复的是否忽略,默认为 false
"ignore-missing-nodes": true
}
如果某个存储节点信息或关系信息的 csv 文件中,存放的都是同种类型的节点或者关系,那么可以在配置文件中指定 label(对于节点)或者 type(对于关系),这样以来,就不需要在文件中,添加 :LABEL
或者 :TYPE
列了。
在 csv 文件中,需要注意内容中出现 列分隔符、数组元素分隔符 的情况,这种情况可能导致 csv 文件格式出错,导致导入失败。
标签:管理 duration 不同 user iter 密码 unity row art
原文地址:https://www.cnblogs.com/wy-ei/p/9251305.html