Neo4j
标签属性图模型 • Nodes – 节点。在其他图模型中称作“点”、“顶点”、“对象”。 • Relationships – 关系。在其他图模型中也称作“边”、“弧”、“线”。关系拥有类型。 • Properties – 属性,可以定义在节点和关系上。 • Labels – 标签,代表节点的类别。
Neo4j与MySQL
这里有列出了一些与关系型数据库对应的概念方便理解:
动机 类似与关系型数据库,创建了多个数据库 想要像访问关系型数据库那样来可以无缝切换多个数据库 然而,在neo4j 3.0都暂时没有办法做到:每次启动neo4j,它只能读取一个数据库。 比如,现在有两个数据库graph.db,graph2.db。假设neo4j默认的数据库为graph.db,启动neo4j,这时候想要访问graph2.db,必须修改neo4j的配置文件,将数据库改为graph2.db,重启,此时才可以访问graph2.db.
那么,如何可以比较neat地切换数据库呢?
配置 Linux环境 同 博客:neo4j远程访问
方法 方法一:修改配置文件 这是官方文档方法 大概思路是:
新建一个conf_test文件 修改neo4j.conf:
代码语言:javascript复制# The name of the database to mount
dbms.active_database=graph2.db //你的数据库
将新的neo4j的配置文件的路径设为当前session的环境变量。 重启neo4j 问题 来了,我每次都要先新建一个conf文件夹,修改conf文件,再设置环境变量,据麻烦!!!
方法二:建立graph.db的软连接【推荐!!!】 (突然走向了大甩卖的风格了 -_-#)
不需要修改配置文件,不需要设置环境变量
首次修改: // 请将$NEO4j_HOME改为你的neo4j的安装路径
代码语言:javascript复制cd $NEO4j_HOME/data/databases/
// 保存原来数据库
mv graph.db graph1.db
//建立指向新数据库的软件接
ln -s graph2.db graph.db
//重启neo4j
cd $NEO4j_HOME/bin
./neo4j restart
再次修改 倘若我想访问graph3.db,就很简单了
//建立指向新数据库的软件接
代码语言:javascript复制ln -s graph3.db graph.db
//重启neo4j
cd $NEO4j_HOME/bin
./neo4j restart
CQL基本简介
Neo4j使用Cypher查询图形数据,Cypher是描述性的图形查询语言,语法简单,功能强大,由于Neo4j在图形数据库家族中处于绝对领先的地位,拥有众多的用户基数,使得Cypher成为图形查询语言的事实上的标准 CQL代表Cypher查询语言。 像Oracle数据库具有查询语言SQL,Neo4j具有CQL作为查询语言。
Cypher语言的关键字不区分大小写,但是属性值,标签,关系类型和变量是区分大小写的。
CQL数据类型
S.No. | CQL数据类型 | 用法 |
---|---|---|
1. | boolean | 用于表示布尔文字:true,false。 |
2. | byte | 用于表示8位整数。 |
3. | short | 用于表示16位整数。 |
4. | int | 用于表示32位整数。 |
5. | long | 用于表示64位整数。 |
6. | float | I用于表示32位浮点数。 |
7. | double | 用于表示64位浮点数。 |
8. | char | 用于表示16位字符。 |
9. | String | 用于表示字符串。 |
常用CQL命令与函数
通过常用命令实现图数据的增删改查
S.No. | CQL命令/条 | 用法 |
---|---|---|
1。 | CREATE创建 | 创建节点,关系和属性 |
2。 | MATCH匹配 | 检索有关节点,关系和属性数据 |
3。 | RETURN返回 | 返回查询结果 |
4。 | WHERE哪里 | 提供条件过滤检索数据 |
5。 | DELETE删除 | 删除节点和关系 |
6。 | REMOVE移除 | 删除节点和关系的属性 |
7。 | ORDER BY以…排序 | 排序检索数据 |
8。 | SET组 | 添加或更新标签 |
常用函数
S.No. | 定制列表功能 | 用法 |
---|---|---|
1。 | String字符串 | 它们用于使用String字面量。 |
2。 | Aggregation聚合 | 它们用于对CQL查询结果执行一些聚合操作。 |
3。 | Relationship关系 | 他们用于获取关系的细节,如startnode,endnode等。 |
图数据的形式
基本语法
节点
节点必须包含在括号 () 内
代码语言:javascript复制(n:Label1:Label2)
• 标签名前必须有冒号 • 节点可以有多个标签 • 标签对节点进行分类,似关系数据库中的表 标签对节点进行分类,类似关系数据库中的表
代码语言:javascript复制(n)
节点可以没有或者不指定标签
代码语言:javascript复制(n:Label {prop: 'value'})
节点可以有属性
关系
关系两端各有一个短横线 /减号,用方括包含关系类型 ,关系类型名前面必须有冒号 (:) 。在其中一端用 >或 < 代表关系的方向,也可以没有方向
代码语言:javascript复制 - - ,<- -,- ->
-[:DIRECTED]- ->
关系以短划线减号和方括号包含 与标签一样关系类型前必须要有“:”
代码语言:javascript复制- ->或 -[r:TYPE] ->
关系在创建时必须指定方向 关系在查询时可以不指定方向表示双向关系
代码语言:javascript复制< >指定关系的方 向
关系也可以有属性
代码语言:javascript复制-[:KNOWS {since: 2010}]
模式
模式是由关系连接起来的节点构成的表达式,关系可以是有方向的,也可以没有方向,双向的
代码语言:javascript复制() -[] -()
() -[] ->()
()< -[] -()
模式的例子
代码语言:javascript复制(n:Label {prop:'value'})-[:TYPE]- >(m:Label)
- 最基本的模式:由一类关系连接两个节点 最基本的模式:
- 由一类关系连接两个节点
(p1:Person {name:'Alice'}) -[:KNOWS][->(p2:Person {name:'Bob'})
如果存在从Alice到Bob的、类型为KNOWS的关系,那么上面模式会将匹配的节点保存在 p1 和p2中。
Cypher查询的组成部分
eg1.
eg 2.
eg 3.
图查询的结果 vs表状数据结果
eg 4.
命名规范
参考文献:Neo4j Inc. APAC 2018年 俞方桦 参考文献:https://www.cnblogs.com/wenruo/p/7850120.html