neo4j 学习-1
Neo4j 子句
- ```
MATCH (:Person { name: 'an' })-[r]->(:Persion)- RETURN type(r) // 返回关系的类型 如:r 就是 'KNOWS'
- MATCH (wallstreet { title: 'Wall Street' })<-[:ACTED_IN|:DIRECTED]-(person)
- RETURN person.name // 使用 “|” 匹配多个关系
```
一般情况下,节点之间的关系描述,夹杂空白字符或者是非文字字符的,但是 ` 使用可以解决这个问题
- ```merge(n{name:"李雷"})-[r:`IS HIS TEACHER`]->(m{name:"ma"})```
指定关系的深度,或者说是路径的长度
```
- MATCH(n{name:"ma"})-[:KNOWS*2]-(m)return m //degree 和path 为2
- MATCH(n{name:"ma"})-[:KNOWS*1..2]-(m)return m //degree 和path 为 1 到 2
- MATCH p = (n{name:"ma"})-[:KNOWS*2]-(m)return p
- MATCH p = (n{name:"ma"})-[:KNOWS*1..2]-(m)return p
- // 这两种会把 最长路径上的所有节点和关系都返回
```
设置不同的路径长度,返回的关系值是不同的
```
- MATCH p = (n{name:"ma"})-[r:KNOWS]-(m)return r
- // {}
- MATCH p = (n{name:"ma"})-[r:KNOWS*1]-(m)return r
- // [{"identity":1,"start":4,"end":1,"type":"KNOWS","properties":{}}] 4 ,1 为节点的 id
- MATCH p = (n{name:"ma"})-[r:KNOWS*2]-(m)return r
- // [{"identity":1,"start":4,"end":1,"type":"KNOWS","properties":{}},{"identity":0,"start":1,"end":3,"type":"KNOWS","properties":{"since":2011}}]
- MATCH p = (n{name:"ma"})-[r:KNOWS*1..2]-(m)return r
- // [{"identity":1,"start":4,"end":1,"type":"KNOWS","properties":{}}],
- //[{"identity":1,"start":4,"end":1,"type":"KNOWS","properties":{}},{"identity":0,"start":1,"end":3,"type":"KNOWS","properties":{"since":2011}}]
- MATCH p = (n{name:"an"})--(m)return id(m) //返回 节点的 id
- MATCH p = (n{name:"an"})--(m) where id(m) = 3 return m
```
```
Zero length paths
Using variable length paths that have the lower bound zero means that two variables can point to the same node. If the path length between two nodes is zero, they are by definition the same node. Note that when matching zero length paths the result may contain a match even when matching on a relationship type not in use.
```
使用变量表示路径,如果关系中有0 ,那么这两个变量指向的是同一个节点。如果两个节点之间的关系路径深度为0 ,那么这个两个节点其实是同一个节点。注意:如果匹配 0 长度时,即使没有指定关系类型,也只会返回一个结果(也就是节点自身)
如果返回或者过滤模式图中的路径,可以使用命名路径
- ```
MATCH p =(michael { name: 'Michael Douglas' })-->() RETURN p
```
如果关系不指定方向,那么就会返回节点两个方向(进/出)的关系。
```
- match(n{name:"sun"}),(e{name:"ma"}),p = shortestPath((n)-[*..3]->(e))return p
- // 利用shortestPath()函数 返回一个两个节点的最短路径。两个节点之间的关系,可以有方向,也没有不指定方向
```
使用where条件语句对结果进行过滤或者限定
- ```
match(n{name:"sun"}),(e{name:"ma"}),p = shortestPath((n)-[*..3]-(e))where NONE (r in relationships(p) where type(r) = 'KNOWS') return p- // none 貌似起到了not的作用。where限定了两个节点之间不能是 KNOWS 关系。
- // type(r) 的返回值是 关系的类型。 relationships()函数返回路径中的关系
- match(n{name:"sun"}),(e{name:"ma"}),p = shortestPath((n)-[*..3]-(e)) return relationships(p)
- //[{"identity":0,"start":1,"end":3,"type":"KNOWS","properties":{"since":2011}},{"identity":1,"start":4,"end":1,"type":"KNOWS","properties":{}}]
- match(n{name:"sun"}),(e{name:"ma"}),p = allShortestPaths((n)-[*..3]-(e)) return p
- // allShortestPaths() 返回所有的路径?!
- MATCH (n) WHERE id(n) IN [0, 3, 5] RETURN n
- //id()可以返回节点,关系的id
- optional match 当匹配的关系/节点,不存在时,返回Null
- match(n{name:"ma"}) optional match(n)<-[r]-(e) return e
- // null
- distinct 如果匹配到多个结果,但是只返回一个
- match(n)-[r]-(m)return r
- // 会返回多个结果,这些结果里面可能有重复的
- match(n)-[r]-(m)return distinct r
- //返回多个结果,但是重复的只返回一次。
- unwind //解包
- match(n)where exists(n.klout)return n.name
- // exists限定了,返回具有klout 属性的节点。
- match(n) where n.name starts with 'E' return n.name
- // ends with 以xx结尾
- //contains 包含
- match(n)where not n.name ends with 'e' return n.name
- // not 放在where 之后,紧挨着 where
- match(n)where n.name =~'E.+'return n
- // 正则表达式
```
neo4j 学习-1的更多相关文章
- Neo4j学习笔记(1)——使用API编写一个Hello World程序
项目的创建及配置 因为Neo4j依赖的jar包比较多,所以推荐使用Maven来管理. 首先创建一个Maven Project,添加依赖: <dependency> <groupId& ...
- Neo4j学习——基本操作(一)
由于开始学习知识图谱,因此需要涉及到neo4j的使用一.介绍neo4j是一个图形数据库基于Java开发而成,因此需要配置jvm才可以运行配置请参考我前面的一篇blog:https://www.cnbl ...
- Neo4j学习笔记(1)——使用Java API实现简单的增删改查
阅读目录 项目的创建及配置 使用嵌入式数据库 创建节点和关系 查询及更新 删除关系和节点 完整代码 参考资料 回到顶部 项目的创建及配置 因为Neo4j依赖的jar包比较多,所以推荐使用Maven来管 ...
- Neo4j 学习笔记(-)
Neo4j 的使用说明(一)(基于V3.4.9) 下一篇(二):https://www.cnblogs.com/infoo/p/11947467.html 一.Neo4j简介 Neo4j是一个高性能的 ...
- Neo4j学习笔记(2)——数据索引
和关系数据库一样,Neo4j同样可以创建索引来加快查找速度. 在关系数据库中创建索引需要索引字段和指向记录的指针,通过索引可以快速查找到表中的行. 在Neo4j中,其索引是通过属性来创建,便于快速查找 ...
- neo4j 学习笔记
1.参考 https://blog.csdn.net/appleyk/article/category/7408344 系列文章 (不支持 spring boo 2.0 以下的,入门可做参考) 2.底 ...
- Neo4j学习笔记
1. 环境搭建 正好最近同学有一台阿里云服务器借我玩,就尝试着在服务器上搭了Neo4j. 环境:CentOS Linux release 7.4.1708 (Core) 安装Java 安装Neo4j需 ...
- Neo4j学习案例【转】
转自 打怪的蚂蚁 CSDN: https://blog.csdn.net/xgjianstart/article/details/77285334 neo4j有社区版本和企业版.社区版本是免费的,只支 ...
- neo4j 学习-2
Neo4j 查询例句 MATCH (john {name: 'John'})-[:friend]->()-[:friend]->(fof) RETURN john.name, fof.na ...
随机推荐
- Linux(Centos7)下安装 zookeeper docker版 集群
为了省去麻烦的软件安装,现在开发环境需要的软件越来越习惯于docker安装了,先看下安装后的截图,开发环境正在启动的容器 1.首先系统需要先支持docker …… 由于之前安装几次都没有做流程记录,在 ...
- Spring的IOC原理 通俗解释
1. IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦合的对象 如果我们打开机械 ...
- Hadoop专业解决方案-第5章 开发可靠的MapReduce应用
本章主要内容: 1.利用MRUnit创建MapReduce的单元测试. 2.MapReduce应用的本地实例. 3.理解MapReduce的调试. 4.利用MapReduce防御式程序设计. 在WOX ...
- Qt5布局管理(一)——QSplitter分割窗口类
转载:LeeHDsniper 概述 本文首先通过三个实例分别介绍Qt5的分割窗口QSplitter类.停靠窗口QDockWidget类.堆栈窗体QStackedWidget类,然后介绍布局管理器的使用 ...
- ubuntu修改Bash命令行提示符
用户通过远程登陆,初始的PS1为\s-\v\$, bash为/bin/bash,然后先后执行/etc/profile和~/.bash_profile中的命令. /etc/profile文件中调用执行/ ...
- Linux修改本地时间
1.Linux时间调整 1)安装ntp(目的同步时间) yum install ntp 2)修改文件 vi /etc/ntp.conf 添加 server ntp.sjtu.edu.cn perfer ...
- javascript节点操作appendChild()
cloneNode(a)方法接受一个布尔值参数,表示是否深拷贝 true:表示执行深拷贝,复制本节点以及整个子节点树. false:浅拷贝.只复制节点本身. 复制后返回的节点副本属于文档所有,但是并没 ...
- Matlab2013a打开M文件乱码解决
win10开发者英文版x64 Matlab2013a 解决方法:format改为chinese
- 在docker中运行kong和kong dashboard
一.制作alpine版的kong镜像 https://github.com/Kong/docker-kong/tree/d4cec3dc46c780a916a40963309554ca81da2b46 ...
- Executor框架(六)CompletionService 接口
CompletionService 接口是一个独立的接口,并没有扩展 ExecutorService . 其默认实现类是ExecutorCompletionService; 接口 Comple ...