Neo4j:图数据库GraphDB(二)

接着上一篇,继续介绍图数据库Neo4j: http://www.cnblogs.com/rongyux/p/5537028.html

三 高级查找操作

1过滤   name = "Tom Hanks"的人

 MATCH (n:Person)
 WHERE n.name = "Tom Hanks"
 RETURN n;

另一种写法:

 MATCH (n:Person {name:"Tom Hanks"})
 RETURN n;

2 排序Order, 限制Limit and 跳跃Skip

根据演员的出生日期排序输出:

 MATCH (a:Person)-[:ACTED_IN]->()
 RETURN a.name, a.born
 ORDER BY a.born 

利用limit和skip分页,下面显示第二页的语句:

 MATCH (a)-[:ACTED_IN]->(m)
 RETURN a.name, m.title
 SKIP 10
 LIMIT 10;

3distinct关键字使用

查询所有电影的参演演员中年龄最高的五个人:

MATCH (a)-[:ACTED_IN]->()
RETURN DISTINCT a
ORDER BY a.born
LIMIT 5

说了这么多,下面两个问题大家能写出对应的CQL吗:

( 1 )查询演员 Tom Hanks 出演的所有电影,并且电影的出版在2000以后?

MATCH (tom:Person)-[:ACTED_IN]->(movie)
WHERE tom.name="Tom Hanks"
AND movie.released > 2000
RETURN movie.title;

( 2 )查询Keanu Reeves 出演的所有电影,并且他的角色是Neo?

MATCH (keanu:Person)-[r:ACTED_IN]->(movie)
WHERE keanu.name="Keanu Reeves"
AND "Neo" IN r.roles
RETURN movie.title;

3 使用比较筛选查询结果

<的使用:

MATCH (tom:Person)-[:ACTED_IN]->()<-[:ACTED_IN]-(a:Person)
WHERE tom.name="Tom Hanks"
AND a.born < tom.born
RETURN a.name;

更复杂一点的语句:

MATCH (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(movie),
      (movie)<-[:ACTED_IN]-(a:Person)
WHERE a.born < tom.born
RETURN DISTINCT a.name, (tom.born - a.born) AS diff;

4使用模式查询

 MATCH (gene:Person)
 WHERE gene.name="Gene Hackman"
 RETURN gene;

复杂一点的:找到所有和Gene一起工作的演员?

MATCH (gene:Person)-[:ACTED_IN]->()<-[:ACTED_IN]-(other)
WHERE gene.name="Gene Hackman"
RETURN DISTINCT other;

再复杂一点:找到与Gene一起工作并且导演过自己电影的伙伴?

MATCH (gene:Person)-[:ACTED_IN]->(m),
(other)-[:ACTED_IN]->(m)
WHERE gene.name="Gene Hackman"
AND   (other)-[:DIRECTED]->()
RETURN DISTINCT other;

更复杂的了:找到与Gene一起工作过,但没有同时和"Robin Williams"合作的演员?

MATCH (gene:Person {name:"Gene Hackman"})-[:ACTED_IN]->(movie),
      (other)-[:ACTED_IN]->(movie),
      (robin:Person {name:"Robin Williams"})
WHERE NOT (robin)-[:ACTED_IN]->(movie)
RETURN DISTINCT other;

5 索引 index

创建索引:INDEX

CREATE INDEX ON :Movie(title);
CREATE INDEX ON :Person(name);

这样的话,查询中有根据name或title的语句就会很快了。(索引的目的就是为了加速查询的)

比如下面的这条语句速度就会提高:

MATCH (gene:Person)-[:ACTED_IN]->(m),
 (other)-[:ACTED_IN]->(m)
WHERE gene.name="Gene Hackman"
RETURN DISTINCT other;

创建标签索引:

CREATE INDEX ON :Person(name);
CREATE INDEX ON :Movie(title);

标签的检索速度就可以提升了,比如下面这句:

MATCH (tom:Person)-[:ACTED_IN]->(movie),
      (kevin:Person)-[:ACTED_IN]->(movie)
WHERE tom.name="Tom Hanks" AND
      kevin.name="Kevin Bacon"
RETURN DISTINCT movie;

6聚类操作

count(x) //Count the number of occurrences
min(x) //Get the lowest value
max(x) //Get the highest value
avg(x) //Get the average of a numeric value
sum(x) //Sum up values
collect(x) //Collect all the values into an collection

eq

 MATCH (a:Person)-[:ACTED_IN]->(m)
 RETURN a.name, collect(m.title);

eq2

 MATCH (a:Person)-[:ACTED_IN]->(m)
RETURN a.name, count(m)
ORDER BY count(m) DESC
LIMIT 10;

查询我们已经了解了不少,下一篇我继续介绍怎么创建图数据库,希望继续关注。

时间: 2024-10-01 21:59:02

Neo4j:图数据库GraphDB(二)的相关文章

Neo4j:图数据库GraphDB(一)

图数据库的代表:Neo4j 官网:  http://neo4j.com/ 引言:为什么使用图数据库 在很多新型项目中,应用图数据库已经是势在必行的趋势了,因为图数据库可以很好的表示各种节点与关系的概念,并且可以很友好的可视化出来,大大方便了我们的数据管理和展示工作. 下面均以演员,导演和电影的图关系做介绍: 一 概念 节点: (a) //actors (m) //movies ( ) //some anonymous nod 关系: -[r]-> //a relationship referre

Neo4j:图数据库GraphDB(三)

本片继续前几篇介绍图数据库的创建,有疑问可以我的看看前两篇文章:http://www.cnblogs.com/rongyux/p/5537206.html 四 图数据库的创建 1 创建一个节点   Person {name: "My Name"} CREATE (me:Person {name: "My Name"}) return me; CREATE (movie:Movie {title: "Mystic River", released:

Neo4j图数据库应用开发之一:Neo4j Java 工具包

1 应用开发概述 基于数据传输效率以及接口自定义等特殊性需求,我们暂时放弃使用Neo4j服务器版本,而是在Neo4j嵌入式版本的基础上进行一些封装性的开发.封装的重点,是解决Neo4j嵌入式版本EmbeddedGraphDatabase中不能同时创建多个实例指向同一个数据库的问题.如果开发人员使用Neo4j嵌入式版本作为数据库,要想实现多个程序共享一个数据库,这将是一个不可回避的问题.本手册给出的解决方案是“构建一个中间服务层,提供各种接口方法,指向同一个数据库实例:其他客户端程序通过中间服务层

neo4j 图数据库安装及介绍

neo4j 图数据库安装及介绍 一.neo4j图数据库介绍 图数据库,顾名思义就是利用了"图的数据结构来作为数据存储逻辑体现的一种数据库",所以要想学好图数据库当然需要了解一些关于图数据结构的算法!同样的作为图数据结构中很多常用的算法在图数据库中是默认提供支持的,对数据进行查询.计算的操作,比如常见的最短路径算法.pagerank算法等等这些算法,都是图数据结构中常见的算法!当然了neo4j作为一个图数据库当然也会提供这些算法的实现,方便使用者对数据进行操作! 那么图数据结构具体又包含

Neo4j图数据库从入门到精通

目录 第一章:介绍 Neo4j是什么 Neo4j的特点 Neo4j的优点 第二章:安装 1.环境 2.下载 3.开启远程访问 4.启动 第三章:CQL 1.CQL简介 2.Neo4j CQL命令/条款 3.Neo4j CQL 函数 4.Neo4j CQL数据类型 第四章:命令 1.CREATE创建 2.MATCH查询 3.RETURN返回 4.关系基础 5.WHERE子句 6.DELETE删除 7.REMOVE删除 8.SET子句 9.ORDER BY排序 10.UNION子句 11.LIMIT

Neo4j视频教程 Neo4j 图数据库视频教程

课程发布地址 地址: 腾讯课堂<Neo4j 图数据库视频教程> https://ke.qq.com/course/327374?tuin=442d3e14 作者 庞国明,<Neo4j权威指南>副主编.<Neo4j 3.x 入门经典>翻译 邮箱:[email protected] QQ:1143815700 Neo4j技术讨论QQ群:547190638 Neo4j中文社区:http://neo4j.com.cn 面向人群 Neo4j初学者:已掌握一定Neo4j技术的开发人

Neo4j教程 Neo4j视频教程 Neo4j 图数据库视频教程

课程发布地址 地址: 腾讯课堂<Neo4j 图数据库视频教程> https://ke.qq.com/course/327374?tuin=442d3e14 作者 庞国明,<Neo4j权威指南>副主编.<Neo4j 3.x 入门经典>翻译 邮箱:[email protected] QQ:1143815700 Neo4j技术讨论QQ群:547190638 Neo4j中文社区:http://neo4j.com.cn 面向人群 Neo4j初学者:已掌握一定Neo4j技术的开发人

使用neo4j图数据库的import工具导入数据 -方法和注意事项

背景 最近我在尝试存储知识图谱的过程中,接触到了Neo4j图数据库,这里我摘取了一段Neo4j的简介: Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中.它是一个嵌入式的.基于磁盘的.具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中.Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性.程序员工作在一个面向对象的.灵活的网络结构下而不是严格.静态的表中--但是他们可以享受到具备完全的事务

Neo4j图数据库管理系统开发笔记之二:嵌入式服务端系统界面一览

最近在neo4j java api和rmi的基础上,设计了一套neo4j管理工具,分为server端和client端,中间用rmi进行通信.基本功能包括图数据库基本信息维护管理(创建.编辑.删除.统计等),图数据库数据维护管理(创建节点和关系.编辑节点和关系属性信息.节点标签管理.索引管理.删除管理.路径深度遍历.两点之间路径寻址等),RMI服务管理等功能. 先把部分功能界面贴出来,希望能对别人有所帮助,如果有需要代码的话,给我留言.