Neo4j

一、Neo4j和图数据库简介

neo4j是基于Java语言编写图形数据库。图是一组节点和连接这些节点的关系。图形数据库也被称为图形数据库管理系统或GDBMS。
Neo4j的是一种流行的图形数据库。 其他的图形数据库是Oracle NoSQL数据库,OrientDB,HypherGraphDB,GraphBase,InfiniteGraph,AllegroGraph。

Neo4j图形数据库的主要构建块是:
  • 节点:是图表的基本单位。 它包含具有键值对的属性
  • 关系:连接两个节点,具有方向:单向和双向。每个关系包含“开始节点”或“从节点”和“到节点”或“结束节点”。关系也可以包含属性作为键值对。
  • 属性:是用于描述图节点和关系的键值对。Key =值,其中Key是一个字符串,值可以通过使用任何Neo4j数据类型来表示
  • 标签:将节点分组为集合。将一个公共名称与一组节点或关系相关联。 节点或关系可以包含一个或多个标签。 我们可以为现有节点或关系创建新标签。我们可以从现有节点或关系中删除现有标签。
  • 数据浏览器:用于执行CQL命令并查看输出输出。

二、Neo4j安装

本人的环境是win10。因此下文介绍在win10上的安装。

2.1 安装Java JDK

neo4j是用Java语言编写的图形数据库,运行时需要启动JVM进程,因此,需安装JAVA SE的JDK。JAVA SE JDK下载
安装好后cmd输入java -version检查是否安装好。

2.2 下载安装Neo4j

从官网下载最新版 Neo4j 社区版(Community)。需要注册后才能下载
下载好后解压到自己想放的盘里,例如:E:\Program Files (x86)\neo4j-community-3.4.0

Neo4j应用程序有如下主要的目录结构:

  • bin目录:用于存储Neo4j的可执行程序;
  • conf目录:用于控制Neo4j启动的配置文件;
  • data目录:用于存储核心数据库文件;
  • plugins目录:用于存储Neo4j的插件;
2.3 创建系统环境变量

在计算机-属性中创建系统环境变量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。

2.4 Neo4j的启动和停止
法一:通过控制台启动Neo4j程序

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安装为服务

安装和卸载服务:
1、neo4j install-service
2、neo4j uninstall-service

启动服务,停止服务,重启服务和查询服务的状态:
1、neo4j start
2、neo4j stop
3、neo4j restart
4、neo4j status
(注意此处可能会出现问题,参考,如无法解决,看看是否以管理员方式运行cmd)
在浏览器中打开http://localhost:7474 默认跳转到 http://localhost:7474/browser,出现Neo4j界面,则安装成功。

初始密码:neo4j 进去之后可以修改密码
如果,neo4j stop不能停止neo4j,
用kill -s 9 强制杀掉进程。

2.5 切换数据库
每次启动neo4j,它只能读取一个数据库。默认情况下的Graph.db数据库。

法一:修改配置文件
使用Neo3.x创建新数据库而不删除现有数据库,所以只需在$NEO4J_HOME\conf的目录编辑neo4j.conf。搜寻dbms.active_database=,其默认值应为graph.db。用其他名称替换它,然后再次启动neo4j。现在,将在该目录名下创建一个新数据库。若要切换回以前的db,请重复这些步骤,只需将新值替换为graph.db在配置文件中。
注意:如果在neo4j启动的时候修改了配置文件,则需要重新启动一次,浏览器页面才会更新。

法二:建立软连接
详见,为linux下的方法。

三、Neo4j的CQL操作

3.1 新增节点:

CREATE (n:节点名称{name1:‘value1’, name2:‘value2’}) RETURN n

新增多个节点:

create(:节点名称{name1:‘value1’}),(:节点名称{ name2:‘value2’}),(:节点名称{name3:“value3”})

3.2 删除节点: MATCH (n:节点名称) DELETE n

删除 id 属性 为 501的节点:MATCH (r) WHERE id(r) = 501  DELETE r RETURN r

3.3 创建相同节点的关系:

MATCH (a:节点名称1{name:‘Liz’}), (b: 节点名称1{name:‘Mike’})
MERGE (a)-[:FRIENDS]->(b)

eg:MATCH (a:Person {name:‘Liz’}), (b:Person {name:‘Mike’})
MERGE (a)-[:FRIENDS]->(b)

创建不同节点的关系:

MATCH (a:节点名称1{name:‘John’}), (b:节点名称2{city:‘Boston’})
MERGE (a)-[:BORN_IN {year:1978}]->(b)

3.4 查询:

查询所有对外有关系的节点: MATCH (a)–>() RETURN a
查询所有有关系的节点: MATCH (a)–() RETURN a

查询所有对外有关系的节点,以及关系类型: MATCH (a)-[r]->() RETURN a.name, type(r’)
查询所有有某种关系的节点: MATCH (n)-[:某种关系]-() RETURN n
eg:MATCH (n)-[:MARRIED]-() RETURN n