IT序号网

neo4j的搭建和实例使用

flyfish 2021年06月14日 数据库 320 0

一. 简介

neo4j是当今最流行的图数据库,基于 节点+关系 的架构,保存了图形数据的基本元素。同时,数据库也支持通过基础数据元素和独特的CQL查询语法,快速方便的检索、构建复杂的图表关系结果。

二. 基础知识

windows安装方法: 安装方法

CQL基本语法:基本语法

三. 实例

我想构建一个父子继承关系的图表结构,以苏洵苏轼家族为例,先建节点node如下:


   
    
  1. create( suxun :Person_{ name: "苏洵",age: 80,sex: "男"})
  2. create( sushi :Person_{ name: "苏轼",age: 53,sex: "男"})
  3. create( suzhe :Person_{ name: "苏辙",age: 51,sex: "男"})
  4. create( suxiaomei :Person_{ name: "苏小妹",age: 45,sex: "女"})
  5. create( susun :Person_{ name: "苏孙",age: 29,sex: "男"})
  6. create( suxiaosun :Person_{ name: "苏重孙",age: 6,sex: "女"})

其中有些节点人名为虚构,为了创建实例方便。  因为我数据库中先前已有Person标签名做了其他的测试,为避免重复和歧义,本例中标签名起为"Person_"。

对于节点之间的关系,为 :

苏洵-------|------苏轼 --------------苏孙 ---------------苏重孙

                 |------苏辙

                 |------苏小妹

因此创建结构的CQL为:


   
    
  1. match(p1:Person_),(p2:Person_)
  2. where p1.name= "苏洵" and p2.name = "苏轼"
  3. create (p1) -[ parent: Parent{relation: "父亲"}]-> (p2);
  4. match(p1:Person_),(p2:Person_)
  5. where p1.name= "苏洵" and p2.name = "苏辙"
  6. create (p1) -[ parent: Parent{relation: "父亲"}] -> (p2);
  7. match(p1:Person_),(p2:Person_)
  8. where p1.name= "苏洵" and p2.name = "苏小妹"
  9. create (p1) -[ parent: Parent{relation: "父亲"}] -> (p2);
  10. match(p1:Person_),(p2:Person_)
  11. where p1.name= "苏轼" and p2.name = "苏孙"
  12. create (p1) -[ parent: Parent{relation: "父亲"}] -> (p2);
  13. match(p1:Person_{name: "苏孙"}),(p2:Person_{name: "苏重孙"})
  14. create (p1) -[ parent: Parent{relation: "父亲"}] -> (p2);

其中有两种方法: 

  • 第一种用where进行节点筛选,例如 where p1.name="苏洵" and p2.name = "苏轼"
  • 第二种用属性进行节点筛选,例如match(p1:Person_{name:"苏孙"}),(p2:Person_{name:"苏重孙"})

两种方法都可以达到效果

最终结果为:

match(a)-[r:Parent]->(b) return a, r, b
  
   

使用match进行筛选,并且拼装成树状结构:

1. 筛选出子孙绵延四代的树干

match(a)-[r1:Parent]->(b)-[r2:Parent]->(c)-[r3:Parent]->(d) return a,  b, c, d
  
   

2. 筛选出存在三代子孙的树干

match(a)-[r1:Parent]->(b)-[r2:Parent]->(c) return a,  b, c
  
   

可以发现,查出来的图形虽然是只有一条链路,但其实代表两条数据,各三级节点,如下

那如果要查询某个节点开始的三级结构呢?

3. 筛选出某个节点为顶点的三代子孙树干

match(a{name:"苏洵"})-[r1:Parent]->(b)-[r2:Parent]->(c) return a,  b, c
  
   

这样就只筛选得到的是以“苏洵”为顶点的三级结构,依次是“苏洵”-->“苏轼”-->“苏孙”

可看到只有一条数据

原文地址:https://blog.csdn.net/u010086122/article/details/82390945


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!