neo4j 查询cypher语句
最近使用nosql数据库neo4j,针对其综合查询学习使用了cypher语句。
分享总结:
1.根据索引为nePort,针对id模糊查询全部节点。根据id排序,limit只去前10条记录
start n = node:nePort('id:*')
match (x)-[:NE_PORT]->(n)
return n,x
order by n.id limit 10
2.这个查询相对于1查询,中多了,match匹配节点间关系,先根据索引查询获取,起点n,在匹配关系,【:关系名称】,a->b 表示从a到b.
该查询,是获取存在一个节点关系志向n,且关系为NE_PORT,这个起点x
start n = node:nePort('id:*')
match (x)-[:NE_PORT]->n
return n.type,n.id,n.speedId,n.code,n.name,n.optical,n.used,n.serial,x.id
order by n.id skip 0 limit 10;
3模糊查询节点id属性中包含11的,的节点。
START ne=node:ne('id=*11*') return ne
4.匹配下级所有[:VC*]
START ne=node(4106557) MACTH ne-[:NE_PORT]->port-[:VC*]-vc where vc.vtag=0 RETURN vc;
5.只匹配到,2层关系为VC的节点。
START ne=node(4106557) MATCH ne-[:NE_PORT]->port-[:VC*1..2]->vc WITH vc WHERE vc.vtag? = 0 RETURN vc;
6.条件,模糊查询。查询 label 含中山的网元
start n=node(3) match n-[:NE]-ne where ne.label =~ '.*中山.*' return ne.id, ne.label, ne.name;
查询语法(Cyphe Query Language)
neo4j自己基于图论的搜索算法,实现了一套查询语言解析,提供了一些常见的聚合函数(max,sum,min,count等)。
Ø START:在图中的开始点,通过元素的ID或所以查找获得。
Ø MATCH:图形的匹配模式,束缚于开始点。
Ø WHERE:过滤条件。
Ø RETURN:返回所需要的。
语法例子:
Join查询:
start n=(1) match (n)-[:BLOCKS]->(x) return x
Where条件:
start n=(2, 1) where (n.age < 30 and n.name = "Tobias") or not(n.name = "Tobias") return n
聚合函数:
start n=(2,3,4) return avg(n.property)
Order:
start n=(1,2,3) return n order by n.name DESC
分页:
start n=(1,2,3,4,5) return n order by n.name skip 1 limit 2
START n=node(*) return n skip 1 limit 2
统计:
START n=node(*) RETURN count(*);
START n=node(*) RETURN "Hello Graph with "+count(*)+" Nodes!" as welcome;
start n = node:nePort('id:*') return n skip " + pageNo + " limit " + pageSize;
如下是在JAVA中使用参数的几个例子:
节点ID参数
1
2
3
Map<String, Object> params = new HashMap<String, Object>();
params.put( "id", 0 );
ExecutionResult result =
engine.execute("start n=node({id}) return n.name", params );
节点对象参数
1
2
3
Map<String, Object> params = new HashMap<String, Object>();
params.put( "node", andreasNode );
ExecutionResult result =
engine.execute("start n=node({node}) return n.name", params );
多节点ID参数
1
2
3
Map<String, Object> params = new HashMap<String, Object>();
params.put( "id", Arrays.asList( 0, 1, 2 ) );
ExecutionResult result =
engine.execute("start n=node({id}) return n.name", params );
字符串参数
1
2
3
4
Map<String, Object> params = new HashMap<String, Object>();
params.put( "name", "Johan" );
ExecutionResult result =
engine.execute("start n=node(0,1,2) where n.name = {name} return n", params );
索引键值参数
1
2
3
4
5
Map<String, Object> params = new HashMap<String, Object>();
params.put( "key", "name" );
params.put( "value", "Michaela" );
ExecutionResult result =
engine.execute("start n=node:people({key} = {value}) return n", params );
索引查询参数
1
2
3
Map<String, Object> params = new HashMap<String, Object>();
params.put( "query", "name:Andreas" );
ExecutionResult result =
engine.execute("start n=node:people({query}) return n", params );
SKIP和LIMIT的数字参数
1
2
3
4
5
Map<String, Object> params = new HashMap<String, Object>();
params.put( "s", 1 );
params.put( "l", 1 );
ExecutionResult result =
engine.execute("start n=node(0,1,2) return n.name skip {s} limit {l}", params );
正则表达式参数
1
2
3
4
Map<String, Object> params = new HashMap<String, Object>();
params.put( "regex", ".*h.*" );
ExecutionResult result =
engine.execute("start n=node(0,1,2) where n.name =~ {regex} return n.name"
通过索引查询获取节点
如果开始节点可以通过索引查询得到,可以如此来写:
node:index-name(key=”value”)。在此列子中存在一个节点索引叫nodes。
查询:
START n=node:nodes(name = "A")
RETURN n
索引中命名为A的节点将被返回。
结果:
调用例子:
db = new ImpermanentGraphDatabase();
engine = new ExecutionEngine( db );
CypherParser parser = new CypherParser();
ExecutionEngine engine = new ExecutionEngine(db);
Query query = parser.parse( "start n=(0) where 1=1 return n" );
ExecutionResult result = engine.execute( query );
assertThat( result.columns(), hasItem( "n" ) );
Iterator<Node> n_column = result.columnAs( "n" );
assertThat( asIterable( n_column ), hasItem(db.getNodeById(0)) );
assertThat( result.toString(), containsString("Node[0]") );
- 浏览: 1048592 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1441)
- 软件思想&演讲 (9)
- 行业常识 (250)
- 时时疑问 (5)
- java/guava/python/php/ruby/R/scala/groovy (213)
- struct/spring/springmvc (37)
- mybatis/hibernate/JPA (10)
- mysql/oracle/sqlserver/db2/mongdb/redis/neo4j/GreenPlum/Teradata/hsqldb/Derby/sakila (268)
- js/jquery/jqueryUi/jqueryEaseyUI/extjs/angulrJs/react/es6/grunt/zepto/raphael (81)
- ZMQ/RabbitMQ/ActiveMQ/JMS/kafka (17)
- lucene/solr/nuth/elasticsearch/MG4J (167)
- html/css/ionic/nodejs/bootstrap (19)
- Linux/shell/centos (56)
- cvs/svn/git/sourceTree/gradle/ant/maven/mantis/docker/Kubernetes (26)
- sonatype nexus (1)
- tomcat/jetty/netty/jboss (9)
- 工具 (17)
- ETL/SPASS/MATLAB/RapidMiner/weka/kettle/DataX/Kylin (11)
- hadoop/spark/Hbase/Hive/pig/Zookeeper/HAWQ/cloudera/Impala/Oozie (190)
- ios/swift/android (9)
- 机器学习&算法&大数据 (18)
- Mesos是Apache下的开源分布式资源管理框架 (1)
- echarts/d3/highCharts/tableau (1)
- 行业技能图谱 (1)
- 大数据可视化 (2)
- tornado/ansible/twisted (2)
- Nagios/Cacti/Zabbix (0)
- eclipse/intellijIDEA/webstorm (5)
- cvs/svn/git/sourceTree/gradle/jira/bitbucket (4)
- jsp/jsf/flex/ZKoss (0)
- 测试技术 (2)
- splunk/flunm (2)
- 高并发/大数据量 (1)
- freemarker/vector/thymeleaf (1)
- docker/Kubernetes (2)
- dubbo/ESB/dubboX/wso2 (2)
最新评论
neo4j 查询cypher话语
发表评论
-
Mysql中DATE_SUB 使用方法结合查询一天内,一周内,一月内的信息实例讲解
2018-02-07 09:05 772在对数据查询或菜单时经常要对指定的时间或时间段进行查询,例 ... -
MySQL里获取当前week、month、quarter的start_date/end_date
2018-02-06 13:51 668select curDate(); #获取当前日 ... -
查看数据库
2018-01-28 20:38 528---mysql查看用户名和密码 select Hos ... -
数据导入到数据库
2018-01-09 20:23 449数据导出当数据量大时最好是dump文件,sql文件过大不好执行 ... -
使用数据库客户端工具Oracle SQL Developer加载第三方驱动连接mysql的方法
2018-02-28 09:20 1252用Oracle SQL Developer时遇到no oc ... -
数据连接符
2018-02-28 09:32 521不同的数据库中字符串连接符不同,下面列举几种数据库的连接符 ... -
commit
2018-01-08 10:12 0刚接触SQLSERVER,刚才insert了一条记录,为什么 ... -
Redis操作命令总结
2017-10-25 12:43 1686redis-cli 中。 使用命令 ... -
PostgreSQL中表名、字段名大小写问题
2017-10-21 20:59 0学习hibernate的时候,数据库用了PostgreSQL ... -
怎么解决Greenplum中用pg
2018-07-19 09:51 475基本思路是为ns1.table1设置分布策略:root登陆 ... -
mysql unrecognized service问题解决
2017-10-21 20:34 0unrecognized 英 [ʌnˈrekəgna ... -
Oracle创建视图、通过视图创建表
2017-10-21 19:11 1139创建视图: [sql] view plain c ... -
PostgreSQL中表名、字段名大小写问题
2017-10-19 10:48 1283如果有视图依赖该表则该表不能删除 学习hibern ... -
关于性能测试几个名词概念的说明
2017-10-11 10:05 435什么是性能测试 在一定的负载下,系统的响应时间 ... -
数据库性能优化详解
2017-10-11 09:59 8491.数据库访问优化法则 要正确的优化SQL,我们需 ... -
Oracle怎样把varchar2型转成number型
2017-09-23 11:13 1654varchar2型转成number型的前提条件是varch ... -
oracle中字符串的大小比较,字符串与数字的比较和运算
2017-09-23 11:08 2773Oracle比较字符串是根据ASCII码来的,第一个字母的 ... -
greenplum 程序开发优化原则
2017-09-22 14:07 718greenplum 程序开发优化原则 1、批量数据处理后, ... -
PostgreSQL 时序最佳实践 - 证券交易系统数据库设计 - 阿里云RDS PostgreSQL最佳实践
2017-09-22 01:06 1282PostgreSQL , 证券 , 时序数据 , JSON ... -
PostgreSQL 时序最佳实践
2017-09-21 12:26 1168以股票交易为例,一共 ...
相关推荐
Neo4j是一种图形数据库,它使用Cypher查询语言进行数据的查询、更新和管理。Cypher是一种声明性的图形查询语言,它允许用户对图形进行表达式丰富且高效的查询、更新和管理。Cypher的设计既适合开发者,也适合运营...
neo4j-cypher-manual-3.5 Cypher is a declarative graph query language that allows for expressive and efficient querying and updating of the graph. It is designed to be suitable for both developers and ...
学习Cypher查询的语法是使用Neo4j的第一步。了解如何声明变量、使用模式匹配、过滤结果以及如何对结果进行排序是基础。Cypher的语法规则设计得非常直观,使得即使是初次接触图数据库的用户也能快速上手。 #### 2. ...
**Neo4j-Cypher-Quick-Reference** 是一套针对新手的快速入门参考资料,它主要聚焦于使用 **Cypher** 查询语言在 **Neo4j** 图数据库中的操作。Cypher 是一种声明式图形查询语言,设计简洁易读,非常适合处理复杂的...
- Cypher语法允许在查询中直接使用字面量(Literal),对于临时的Cypher查询而言,这是适用的做法。然而,对于应用程序的最优实践是使用参数化查询,这里以`{value}`作为示例。 - Neo4j属性可以是字符串、数字、...
标题 "kettle-neo4j-cypher-output" 指的是一个Kettle插件,该插件专门设计用于将数据从Kettle转换流程中输出到Neo4j图形数据库,利用Cypher查询语言来创建、更新或操作节点和关系。Cypher是Neo4j所采用的声明式图形...
│ Neo4j 第三篇:Cypher查询入门 - 悦光阴 - 博客园.html │ Neo4j 第二篇:图形数据库 - 悦光阴 - 博客园.html │ Neo4j 第五篇:批量更新数据 - 悦光阴 - 博客园.html │ Neo4j 第四篇:使用C更新和查询Neo4j...
10. **Cypher风格指南**:提供了编写清晰、可维护的Cypher查询的最佳实践,包括命名约定、注释规则和代码组织。 总的来说,"Neo4j Cypher Manual v4.1"是一个全面的学习资源,涵盖了从基础到高级的所有Cypher知识,...
This is the Cypher manual for Neo4j version 3.5, authored by the Neo4j Team. This manual covers the following areas: • Introduction — Introducing the Cypher query language. • Syntax — Learn ...
Neo4j Cypher查询格式化程序 当我刚开始使用Neo4j和Cypher时,我总体上很喜欢这种语法-但是我看不到任何简单易用的在线查询格式化程序-因此是这个项目。 它使用原始正则表达式方法进行未格式化的Cypher查询,并返回...
5. **Cypher图查询语言**:Cypher是Neo4j专为图数据库设计的查询语言,其特点包括声明性、表达性和模式匹配。声明性意味着用户只需定义要查找的数据,而不需关心实现方式;表达性强,使得Cypher对开发者和业务人员都...
**Neo4j Cypher语言是图数据库 Neo4j 的核心查询语言**,它设计得简洁易读,使得处理复杂的图数据变得直观而高效。Cypher 语法类似于 SQL,但更侧重于图形操作,如节点、关系和属性的操作。在腾讯课堂上的 Neo4j ...
Neo4j 作为一款强健的,可伸缩的高性能数据库,Neo4j最适合完整的企业部署或者用于一个轻量级项目中完整服务器的一个子集存在。 它包括如下几个显著特点: 完整的ACID支持、高可用性、轻易扩展到上亿级别的节点和关系...
jgrapht-neo4j-client 是用Java实现的开源图形数据库。 是一个免费的Java图形库... 使用jgrapht-neo4j-client,您可以从Neo4j Cypher查询中获得JGraphT图形对象。 您可以在以下博客文章中了解有关此项目的更多信息:
Jupyter-Notebook
【描述】"neo4j-cypher Haskell Neo4j 库专注于密码 - 尚不可用" 表明该库的核心功能是支持 Cypher 查询,但同时也提示当前可能未处于可用状态。这可能意味着库可能仍在开发中,或者存在某些功能限制或兼容性问题。...
Cypher 是 Neo4j 提供的一种声明式查询语言,用于高效地检索和更新图数据。它使用图形模式匹配作为主要机制来处理图形数据的选择。Cypher 的语法直观易懂,支持创建、读取、更新和删除操作。 #### 四、Cypher 基本...
【标题】"neo4j-graphql-java"是一个用于在Java虚拟机(JVM)环境中将GraphQL查询和突变转换为Neo4j Cypher语句的库。它旨在提供一种高效且无缝的方式,使得开发人员能够利用GraphQL的强大功能来操作图数据库——...
解析在VS Code中键入到当前打开文档中的Neo4j / Cypher查询/突变。 将查询/变异发送到用户配置文件中定义的数据库。 将响应渲染到VS Code上的Trinity输出通道。 (可选)根据用户的配置将输出写入本地JSON文件。 ...
对于更复杂的查询,可以自定义Repository方法,利用Neo4j的Cypher查询语言。Cypher是一种声明式的图形查询语言,非常适合处理图形数据的查询和更新。例如,查找所有与特定节点有关系的其他节点: ```java public ...