前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >neo4j︱Cypher 查询语言简单案例(二)

neo4j︱Cypher 查询语言简单案例(二)

作者头像
悟乙己
发布2019-05-26 10:07:23
2K0
发布2019-05-26 10:07:23
举报
文章被收录于专栏:素质云笔记素质云笔记

版权声明:博主原创文章,微信公众号:素质云笔记,转载请注明来源“素质云博客”,谢谢合作!! https://blog.csdn.net/sinat_26917383/article/details/79850412

图数据库常规的有:neo4j(支持超多语言)、JanusGraph/Titan(分布式)、Orientdb,google也开源了图数据库Cayley(Go语言构成)、PostgreSQL存储RDF格式数据。

—- 目前的几篇相关:—–

neo4j︱图数据库基本概念、操作罗列与整理(一)

neo4j︱Cypher 查询语言简单案例(二)

neo4j︱Cypher完整案例csv导入、关系联通、高级查询(三)

neo4j系列第二篇,一个简单的demo案例,从构建-基本内容查询。


一、三要素:节点、关系、模式

1.1 节点

基本用法:

代码语言:javascript
复制
MATCH (node:Label) RETURN node.property

MATCH (node1:Label1)-->(node2:Label2)
WHERE node1.propertyA = {value}
RETURN node2.propertyA, node2.propertyB

我们通常用圆括号来包含节点标示符(当然也可以不用)。里面的内容也叫变量,变量不是单指某一个节点,而是服从条件的节点组合。如(p: Person),如果想添加属性:(p: Person {name: “yinglish”})。 注意:节点标签、关系类型和属性名称区分大小写。

其中节点之间用:’–>’,包含关系的可以用’->’

1.2 关系

有以下几种关系型写法:

代码语言:javascript
复制
-[rel:KNOWS]-> //单关系,关系的变量名为rel,类型是 KNOWS
(a)-[:KNOWS|:LIKE]->(b) //查询a到b的两类关系
-[{since:2010}]-> //附加属性
-[:KNOWS*..4]-> example: a -[rel: type*minHop..maxHop]-> b  
//从a节点到b节点最少可经过minHop、最大可经过maxHop个节点

关系表达,cypher语法:

举例:

代码语言:javascript
复制
MATCH (n1:Label1)-[rel:TYPE]->(n2:Label2)
WHERE rel.property > {value}
RETURN rel.property, type(rel)

1.3 模式 Patterns

其功能为:Patterns can be used to MATCH and CREATE data, but also (evaluating to a list of paths) in expressions, predicates and results.

patterns 模式由一个或多个路径组成,路径间用逗号分隔,一条路径就是一个节点和关系的序列,这个序列指定开始和结束节点,如:(a) –> (b),这条路径开始于a,通过outgoing关系指向b。如果你不在乎具体是哪个节点,不用指定它,只需要用空括号来表示就可以了,如:a –>()–>b。模式是cypher中的关键部分,灵活书写模式能帮我们正确获取、实现推测计算等等各种任务。

  • friend-of-a-friend (user)-:KNOWS-(friend)-:KNOWS-(foaf)
  • shortest path: path = shortestPath( (user)-:KNOWS*..5-(other) )
  • collaborative filtering (user)-:PURCHASED->(product)<-:PURCHASED-()-:PURCHASED->(otherProduct)
  • tree navigation (root)<-:PARENT*-(leaf:Category)-:ITEM->(data:Product)

比较费解…

.


二、使用案例demo

从0开始构建一个非常小的关系网络结构,来简单应用cypher语言。

来源:GraphGist: First Steps with Cypher by Michael Hunger

1、创建自己’You’的节点

代码语言:javascript
复制
CREATE (you:Person {name:"You"})
RETURN you

2、创建与自己关系的节点

代码语言:javascript
复制
MATCH (you:Person {name:"You"})
CREATE (you)-[like:LIKE]->(neo:Database {name:"Neo4j" })
RETURN you,like,neo

match到’You’节点之后,新建一条关系,是’You’-‘like’-‘neo4j’。

当create之后,return之后,就会返回三个实体,2个节点+1条关系。

match中,变量-变量,可以用’–>’,关系型的指向用’->’

3、批量创建与自己有关的朋友

代码语言:javascript
复制
MATCH (you:Person {name:"You"})
FOREACH (name in ["Johan","Rajesh","Anna","Julia","Andrew"] |
 CREATE (you)-[:FRIEND]->(:Person {name:name}))

其中,foreach表示循环,反复create。再来看一个foreach的案例(from:3.3.15. FOREACH):

代码语言:javascript
复制
MATCH p =(begin)-[*]->(END )
WHERE begin.name = 'A' AND END .name = 'D'
FOREACH (n IN nodes(p)| SET n.marked = TRUE )

4、查询你的朋友圈

代码语言:javascript
复制
match (you {name:'You'})-[:FRIEND]->(yf)
return you,yf

通过关系查询’You’的朋友圈

5、新建朋友圈之外的二度关系

代码语言:javascript
复制
match (neo:Database {name : 'Neo4j'})
create (anna:Person {name:'Anna'})-[:FRIEND]->(ama:Person:Expert {name:'Amanda'})-[:WORKED_WITH]->(neo)
return neo,anna,ama

创建了’Anna’-‘Amanda’的朋友关系,创建了’Amanda’-‘neo’的工作关系。

同时,定义了’Amanda’的’Expert’身份。

6、查询:我通过朋友圈的谁来学习neo4j

代码语言:javascript
复制
match (you:Person {name:"You"}) 
match (expert)-[:WORKED_WITH]->(neo:Database {name:'Neo4j'})
match path = shortestPath((you)-[:FRIEND*..5]-(expert))
return path,you,expert,neo

先定位自己you,然后去寻找朋友中谁懂Neo4j:person->neo,然后寻找最短路径的:you-person即可达到目的。

不能用you直接关联neo,而是通过朋友,二度跳转到neo4j。

此时的(expert)->(neo)值得新手去理解一下,这里expert不是单独指定到某个人,而是指代所有WORKED_WITH neo的人。


参考文献:

Intro to Cypher

GraphGist: First Steps with Cypher

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年04月08日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、三要素:节点、关系、模式
    • 1.1 节点
      • 1.2 关系
        • 1.3 模式 Patterns
        • 二、使用案例demo
          • 1、创建自己’You’的节点
            • 2、创建与自己关系的节点
              • 3、批量创建与自己有关的朋友
                • 4、查询你的朋友圈
                  • 5、新建朋友圈之外的二度关系
                    • 6、查询:我通过朋友圈的谁来学习neo4j
                      • 参考文献:
                      相关产品与服务
                      数据库
                      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档