Neo4j - CQL(Cypher)基本操作(一)

2019-01-25 11:31:33 浏览数 (1)

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)
  • 最基本的模式:由一类关系连接两个节点 最基本的模式:
  • 由一类关系连接两个节点
代码语言:javascript复制
(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

0 人点赞