美文网首页
neo4j的简单介绍和使用

neo4j的简单介绍和使用

作者: 傻疯子 | 来源:发表于2022-01-07 22:58 被阅读0次

    neo4j是一个将结构化数据存储为图的图数据库,可以快速查询多个事物之间的关系及其关系链。

    图是由点(Vertex),边(Edge)和属性(Property)组成的,点和边都可设置属性,点是节点,边是两个节点之间的关系。

    使用

    用docker测试

    docker pull neo4j
    docker run -it -d -p 7474:7474 -p 7687:7687 neo4j:latest
    

    添加数据

    创建点:

    //创建两个节点,会重复创建
    create (p1:Person {name:"zhangsan"})
    create (p2:Person {name:"lisi"})
    
    

    创建边

    //创建两个节点的同时建立关系
    create (p1:Person {name:"zhangsan"}) -[:friend]-> (p2:Person {name:"lisi"})
    
    //创建两个不存在的节点同时建立关系
    //merge类似于create if not exist,同时会将这两个节点的变量赋值到p3,p4
    //将p3,p4建立连接关系。
    merge(p3:Person {name:"wangwu"})
    merge(p4:Person {name:"zhaoliu"})
    merge(p3) -[:classmate]->(p4)
    

    对存在的节点创建边

    //将查到的点赋值到a,b两个变量中并建立连接关系。
    match(a:Person {name:"zhangsan"}),(b:Person {name:"lisi"})  
    merge(a)-[:neighbor]->(b)
    
    查询数据

    match可以连接为查询
    查询节点

    //返回name为zhangsan的Person
    match(p:Person {name:"zhangsan"}) return p
    

    根据连接关系查询

    //查询zhangsan的neighbor
    match (:Person {name:"zhangsan"}) -[:neighbor]-> (p:Person) return p
    

    这里return p相比sql语句,将select换为return,省去from,需要where的情况需要把它写在return前面.
    类似于where (condition) return (field) ,(aggregate) (order by field) (limit n)

    更新数据

    修改节点的属性

    //获取节点对象,并用set修改
    match (p:Person {name:"zhangsan"}) set p.age= 100
    

    删除连接关系

    //获取关系对象,最后用delete删除
    match (:Person {name:"zhangsan"}) -[r:neighbor]-> (:Person {name:"lisi"}) delete r
    
    建立索引

    需要用where筛选进行查询的用第一种,需要建立唯一约束的用第二种
    CREATE INDEX ON :Person(name)
    CREATE CONSTRAINT ON (p:Person) ASSERT p.id IS UNIQUE

    批量导入

    可以用batch import和load csv
    其中load csv可以参考以下内容

    //将文件放到import/目录下
    //连接neo4j
    bin/cypher-shell -a bolt://localhost:7687 -u neo4j -p admin
    neo4j>CREATE CONSTRAINT ON (p:Person) ASSERT p.name IS UNIQUE
    
    neo4j>USING PERIODIC COMMIT 1000
           LOAD CSV WITH HEADERS FROM 'file:///person_relation.log' AS line FIELDTERMINATOR '\t'
           MERGE (a:Person { name: toString(line.nameA)})
           MERGE (b:Person { name: toString(line.nameB)})
           MERGE (a)-[:neighbor]->(b);
    

    相关文章

      网友评论

          本文标题:neo4j的简单介绍和使用

          本文链接:https://www.haomeiwen.com/subject/hjbjcrtx.html