neo4j是基于Java语言编写图形数据库。图是一组节点和连接这些节点的关系。图形数据库也被称为图形数据库管理系统或GDBMS。
Neo4j的是一种流行的图形数据库。 其他的图形数据库是Oracle NoSQL数据库,OrientDB,HypherGraphDB,GraphBase,InfiniteGraph,AllegroGraph。
Neo4j图形数据库的主要构建块是:
本人的环境是win10。因此下文介绍在win10上的安装。
neo4j是用Java语言编写的图形数据库,运行时需要启动JVM进程,因此,需安装JAVA SE的JDK。JAVA SE JDK下载
安装好后cmd输入java -version
检查是否安装好。
从官网下载最新版 Neo4j 社区版(Community)。需要注册后才能下载
下载好后解压到自己想放的盘里,例如:E:\Program Files (x86)\neo4j-community-3.4.0
Neo4j应用程序有如下主要的目录结构:
在计算机-属性中创建系统环境变量NEO4J_HOME
,并把主目录(E:\Program Files (x86)\neo4j-community-3.4.0)设置为变量值。
NEO4J_HOME=E:\Program Files (x86)\neo4j-community-3.4.0
再在path中添加%NEO4J_HOME%\bin
。
CMD管理员身份运行(一定要以管理员身份进入CMD,否则会出现警告。警告: This command does not appear to be running with administrative rights. Some commands may fail e.g. Start/Stop)
输入:neo4j.bat console
安装和卸载服务:
neo4j install-service
neo4j uninstall-service
启动服务,停止服务,重启服务和查询服务的状态:
neo4j start
neo4j stop
neo4j restart
neo4j status
(注意此处可能会出现问题,参考https://blog.csdn.net/weixin_42103075/article/details/80473283,如无法解决,看看是否以管理员方式运行cmd)
在浏览器中打开http://localhost:7474 默认跳转到 http://localhost:7474/browser,出现Neo4j界面,则安装成功。
初始密码:neo4j 进去之后可以修改密码
如果,neo4j stop
不能停止neo4j,
用kill -s 9
强制杀掉进程。
每次启动neo4j,它只能读取一个数据库。默认情况下的Graph.db数据库。
使用Neo3.x创建新数据库而不删除现有数据库,所以只需在$NEO4J_HOME\conf
的目录编辑neo4j.conf。搜寻dbms.active_database=
,其默认值应为graph.db。用其他名称替换它,然后再次启动neo4j。现在,将在该目录名下创建一个新数据库。若要切换回以前的db,请重复这些步骤,只需将新值替换为graph.db在配置文件中。
注意:如果在neo4j启动的时候修改了配置文件,则需要重新启动一次,浏览器页面才会更新。
详见https://blog.csdn.net/programmer_at/article/details/69570987,为linux下的方法。
CQL代表Cypher查询语言。 像Oracle数据库具有查询语言SQL,Neo4j具有CQL作为查询语言。
运行Neo4j之后,在软件窗口可以选择数据库创建位置,之后Neo4j就自动为我们创建好了数据库。
创建唯一性约束,同时具有索引效果,类似关系型数据库中的主键。注意,这只能在数据库中还未插入数据时设置。
CREATE CONSTRAINT ON (a:Person) ASSERT a.name IS UNIQUE;
创建索引。
CREATE INDEX ON :Person(name);
查看所有的节点数和边数
MATCH (n) RETURN count(n);
MATCH ()-->() RETURN count(*);
插入节点。插入一个Person类别的节点,且这个节点有一个属性name,属性值为Andres
CREATE (n:Person { name : 'Andres'});
插入边。插入一条a到b的有向边,且边的类别为Follow
MATCH (a:Person),(b:Person)
WHERE a.name = 'Node A' AND b.name = 'Node B'
CREATE (a)-[r:Follow]->(b);
更新节点。更新一个Person类别的节点,设置新的name。
MATCH (n:Person { name: 'Andres' })
SET n.name = 'Taylor';
删除节点和与其相连的边。Neo4j中如果一个节点有边相连,是不能单单删除这个节点的。
MATCH (n:Person { name:'Andres' })
DETACH DELETE n;
删除边。
MATCH (a:Person)-[r:Follow]->(b:Person)
WHERE a.name = 'Andres' AND b.name = 'Taylor'
DELETE r;
作为图形数据库,有一些独有的查询语句
最短路径。
MATCH (ms:Person { name:'Andres' }),(cs:Person { name:'Taylor' }), p = shortestPath((ms)-[r:Follow]-(cs)) RETURN p;
查询两个节点之间的关系。
MATCH (a:Person { name:'Andres' })-[r]->(b:Person { name:'Taylor' })
RETURN type( r);
查询一个节点的所有Follower。
MATCH (:Person { name:'Taylor' })-[r:Follow]->(Person)
RETURN Person.name;
清空所有数据(删除所有节点和关系)
MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r
上面的方式会将node和relations都删除,但这种删除方式仍会有一些信息未清空(如Property keys),在linux下彻底删除数据库使用如下方式:
>bin/neo4j stop
>rm -rf data/databases/graph.db
>bin/neo4j start
Windows中直接删除data/databases/graph.db或其他指定db中的全部数据即可。
其他参见Neo4j用户手册:Neo4j Documentation
首先从MySQL数据库导出csv文件,复制到import文件夹E:\Program Files (x86)\neo4j-community-3.4.0\import
里,然后执行下列语句:
//导入节点 电影类型 == 注意类型转换
LOAD CSV WITH HEADERS FROM "file:///genre.csv" AS line
MERGE (p:Genre{gid:toInteger(line.gid),name:line.gname})
//导入节点 演员信息
LOAD CSV WITH HEADERS FROM 'file:///person.csv' AS line
MERGE (p:Person { pid:toInteger(line.pid),birth:line.birth,
death:line.death,name:line.name,
biography:line.biography,
birthplace:line.birthplace})
// 导入节点 电影信息
LOAD CSV WITH HEADERS FROM "file:///movie.csv" AS line
MERGE (p:Movie{mid:toInteger(line.mid),title:line.title,introduction:line.introduction,
rating:toFloat(line.rating),releasedate:line.releasedate})
// 导入关系 actedin 电影是谁参演的 1对多
LOAD CSV WITH HEADERS FROM "file:///person_to_movie.csv" AS line
match (from:Person{pid:toInteger(line.pid)}),(to:Movie{mid:toInteger(line.mid)})
merge (from)-[r:actedin{pid:toInteger(line.pid),mid:toInteger(line.mid)}]->(to)
//导入关系 电影是什么类型 == 1对多
LOAD CSV WITH HEADERS FROM "file:///movie_to_genre.csv" AS line
match (from:Movie{mid:toInteger(line.mid)}),(to:Genre{gid:toInteger(line.gid)})
merge (from)-[r:is{mid:toInteger(line.mid),gid:toInteger(line.gid)}]->(to)
参考网址:
W3Cschool-neo4j教程(推荐)
Neo4j官方教程(推荐)
Neo4j概述
win10 下安装 neo4j
Neo4j安装&入门&一些优缺点
基于电影知识图谱的智能问答系统(二) – Neo4j导入CSV文件(系列文章,很全,java+spark)