Neo4j的CQL语法
来源:互联网 发布:stc单片机usb驱动下载 编辑:程序博客网 时间:2024/06/07 14:06
Neo4j - CQL简介
页面Neo4j图数据库遵循属性图模型来存储和管理其数据。
属性图模型规则
一、表示节点,关系和属性中的数据
二、节点和关系都包含属性
三、关系连接节点
四、属性是键值对
五、节点用圆圈表示,关系用方向键表示。
六、关系具有方向:单向和双向。
每个关系包含“开始节点”或“从节点”和“到节点”或“结束节点”
在属性图数据模型中,关系应该是定向的。如果尝试创建没有方向的关系,那么它将抛出一个错误消息。
在Neo4j中,关系也应该是有方向性的。如果尝试创建没有方向的关系,那么Neo4j会抛出一个错误消息,“关系应该是方向性的”。
Neo4j图数据库将其所有数据存储在节点和关系中。不需要任何额外的RRBMS数据库或无SQL数据库来存储Neo4j数据库数据。它以图形的形式存储其数据的本机格式。
Neo4j使用本机GPE(图形处理引擎)引擎来使用它的本机图存储格式。
图形数据库数据模型的主要构建块是:
1. 节点
2. 关系
3. 属性
简单的属性图的例子:
这里使用圆圈表示节点。使用箭头的关系。 关系是有方向性的。可以用Properties(键值对)来表示Node的数据。 在这个例子中,我们在Node的Circle中表示了每个Node的Id属性。
cypher是neo4j官网提供的声明式查询语言,非常强大,用它可以完成任意的图谱里面的查询过滤,我们知识图谱的一期项目 基本开发完毕,后面会陆续总结学习一下neo4j相关的知识。今天接着上篇文章来看下neo4j的cpyher查询的一些基本概念和语法。
1,创建
create (:Movie {title:"驴得水",released:2016}) return p;
执行成功,在neo4j的web页面我们能看到下面的信息
+-------------------+| No data returned. |
+-------------------+
Nodes created: 1
Properties set: 2
Labels added: 1
当然cypher也可以一次创建多个数据,并同时添加关系
2,查询
match (p: Person) return p; 查询Person类型的所有数据
match (p: Person {name:"sun"}) return p; 查询名字等于sun的人
match( p1: Person {name:"sun"} )-[rel:friend]->(p2) return p2.name , p2.age 查询sun的朋友的名字和年龄
match (old) ... create (new) create (old)-[rel:dr]->(new) return new 对已经存在的节点和新建的节点建立关系
3,查询或更新
merge 语法可以对已经存在的节点不做改变,对变化的部分会合并
MERGE (m:Movie { title:"Cloud Atlas" })ON CREATE SET m.released = 2012RETURN m
merge .... on create set ... return 语法支持合并更新
4,筛选过滤
cypher过滤也是用的和SQL一样的关键词where
match (p1: Person) where p1.name="sun" return p1;
等同下面的
match (p1: Person {name:"sun"}) return p1
注意where条件里面支持 and , or ,xor,not等boolean运算符,在json串里面都是and
除此之外,where里面查询还支持正则查询
match (p1: Person)-[r:friend]->(p2: Person) where p1.name=~"K.+" orp2.age=24 or"neo" in r.rels return p1,r,p2
关系过滤匹配使用not
MATCH (p:Person)-[:ACTED_IN]->(m)WHERE NOT (p)-[:DIRECTED]->()RETURN p,m
5,结果集返回
MATCH (p:Person)RETURN p, p.nameAS name, upper(p.name), coalesce(p.nickname,"n/a")AS nickname, { name: p.name,
label:head(labels(p))}AS person
结果集返回做去重
match (n) return distinct n.name;
6,聚合函数
cypher支持count,sum,avg,min,max
match (: Person) return count(*)
聚合的时候null会被跳过 count 语法 支持 count( distinct role )
MATCH (actor:Person)-[:ACTED_IN]->(movie:Movie)<-[:DIRECTED]-(director:Person)RETURN actor,director,count(*)AS collaborations
7,排序和分页
MATCH (a:Person)-[:ACTED_IN]->(m:Movie)RETURN a,count(*)AS appearancesORDER BY appearancesDESC SKIP 3 LIMIT 10;
8, 收集聚合结果
MATCH (m:Movie)<-[:ACTED_IN]-(a:Person)
RETURN m.title AS movie, collect(a.name) AS cast,count(*) AS actors
9, union 联合
支持两个查询结构集一样的结果合并
MATCH (actor:Person)-[r:ACTED_IN]->(movie:Movie)
RETURN actor.name AS name, type(r) AS acted_in, movie.title AS title
UNION (ALL)
MATCH (director:Person)-[r:DIRECTED]->(movie:Movie)
RETURN director.name AS name, type(r) AS acted_in, movie.title AS title
10, with
with语句给cypher提供了强大的pipeline能力,可以一个或者query的输出,或者下一个query的输入 和return语句非常类似,唯一不同的是,with的每一个结果,必须使用别名标识。
通过这个功能,我们可以轻而易举的做到在查询结果里面在继续嵌套查询。
MATCH (person:Person)-[:ACTED_IN]->(m:Movie)
WITH person, count(*) AS appearances,collect(m.title) AS movies
WHERE appearances > 1
RETURN person.name, appearances, movies
注意在SQL里面,我们想过滤聚合结果,需要使用having语句但是在cypher里面我们可以配合with语句使用 where关键词来完成过滤
11,添加约束或者索引
唯一约束(使用merge来实现) CREATE CONSTRAINT ON (movie:Movie) ASSERT movie.title IS UNIQUE
添加索引(在图谱遍历时,快速找到开始节点),大幅提高查询遍历性能 CREATE INDEX ON :Actor(name)
添加测试数据:
CREATE (actor:Actor {name:"Tom Hanks" }),(movie:Movie {title:'Sleepless IN Seattle' }),
(actor)-[:ACTED_IN]->(movie);
使用索引查询:
MATCH (actor:Actor {name: "Tom Hanks" })RETURN actor;
- Neo4j的CQL语法
- neo4j 一些常用的cql
- Neo4j CQL
- Neo4j CQL
- Neo4j CQL
- Neo4j CQL
- Neo4j CQL
- Neo4j CQL
- Neo4j CQL -(16)- 合并
- CQL IN 语法的应用方法
- Neo4j CQL -(1)- CREATE命令
- Neo4j CQL -(8)- WHERE子句
- Neo4j CQL -(10)- DELETE删除
- Neo4j CQL -(14) -UNION联合
- Neo4j CQL -(17)- NULL值
- Neo4j CQL-(18)IN操作符
- Neo4J CQL -(19)- 字符串函数
- Neo4j CQL -(20)- AGGREGATION聚合
- 【java.lang.UnsupportedClassVersionError】版本不一致出错
- apache httpd event worker 笔记1
- 关于Android的径向渐变高级编程的实现
- 数据库及图片文件定期备份
- 虚拟机 centos7 ping不通主机及其他网站
- Neo4j的CQL语法
- C++ escape和unescape算法
- ZooKeeper 入门
- mysql 解压版安装教程
- Mysql四种语句
- mybatis报错 Error querying database. Cause: java.lang.IllegalArgumentException: Mapped Statements col
- Android Studio----- 无法打印log----问题解决----华为坑深
- composer在thinkphp中的安装和使用
- Android 去掉控件点击的瞬间的波纹效果