zoukankan      html  css  js  c++  java
  • Neo4j基本用法

    Cypher提供了一个方便的方法去表示查询和其他的neo4j行为,Cypher不仅可以完成工作,也可以在产品中有足够快的速度。也可以 基于java语言来处理查询用例,使用java API可以自定义遍历方法。

    Cypher语言进行查询的步骤为:语法分析和验证查询,生成执行方案,定位初始节点,选择和遍历关系,改变或者返回结果。在图数据库中进行强力搜索是非常消耗时间的,最好有一初始节点,或者有相应的索引。

    在图数据库中,有联系的节点以及联系所组成的模式(pattern)是最有价值的东西,提供了最多的信息。Cypher语言正是基于模式的语言,可以非常直观的表达模式。

    Cypher基本语法

    节点语法:(),(matrix),(:movie),(matrix:Movie{title:“the matix”,released:1997})

    关系语法: -[role:ACTED_IN{roles:[“neo”]}]->

    模式语法:(:people)-[:like]->(:people)

    模式可以赋值给标示符:like=(:people)-[:like]->(:people)

    在模式中使用的节点表示数据库中0到多个物理节点,关系代表数据库中的零到多个关系,模式表示0到多个路径。

    Cypher子句

    Create子句:创建新的节点,关系,模式

    CREATE (a:Person { name:"Tom Hanks",   born:1956 })-[r:ACTED_IN { roles: ["Forrest"]}]->(m:Movie { title:"Forrest Gump",released:1994 })

    CREATE (d:Person { name:"Robert Zemeckis", born:1951 })-[:DIRECTED]->(m) RETURN a,d,r,m

    Match子句:类似于查找

    MATCH (p:Person { name:"Keanu Reeves" }) RETURN p
    MATCH (p:Person { name:"Tom Hanks" })-[r:ACTED_IN]->(m:Movie)
    RETURN m.title, r.roles

    组合子句:

    MATCH (p:Person { name:"Tom Hanks" })

    CREATE (m:Movie { title:"Cloud Atlas",released:2012 })

    CREATE (p)-[r:ACTED_IN { roles: ['Zachry']}]->(m)

    RETURN p,r,m

    Merge子句:结合了create和match子句的功能,首先查找是否有符合模式的节点或者路径,如果没有符合模式条件的结果,则创建符合模式的节点或者路劲。同时提供了on create子句,可以在创建节点或者关系的情况下执行特定的操作。Merge子句

    MERGE (m:Movie { title:"Cloud Atlas" })

    ON CREATE SET m.released = 2012

    RETURN m

    MATCH (m:Movie { title:"Cloud Atlas" })

    MATCH (p:Person { name:"Tom Hanks" })

    MERGE (p)-[r:ACTED_IN]->(m)

    ON CREATE SET r.roles =['Zachry']

    RETURN p,r,m

    获取想要的结果

    过滤结果:where子句

    MATCH (m:Movie)

    WHERE m.title = "The Matrix"

    RETURN m

    //等价用法

    MATCH (m:Movie { title: "The Matrix" })
    RETURN m
    //返回没有导演过电影的演员及其所演过的电影
    MATCH (p:Person)-[:ACTED_IN]->(m)
    WHERE NOT (p)-[:DIRECTED]->()     //没有导演过电影的人才满足
    RETURN p,m

    在结果中使用表达式:组织返回的结果的形式

    MATCH (p:Person) 
    RETURN p, p.name AS name, upper(p.name), coalesce(p.nickname,"n/a") AS nickname, { name: p.name,   label:head(labels(p))} AS person

    聚合数据:对返回的结果进行统计

    //统计演员和导演合作的次数
    MATCH (actor:Person)-[:ACTED_IN]->(movie:Movie)<-[:DIRECTED]-(director:Person) 
    RETURN actor,director,count(*) AS collaborations

    排序

    MATCH (a:Person)-[:ACTED_IN]->(m:Movie) 
    RETURN a,count(*) AS appearances 
    ORDER BY appearances DESC LIMIT 10;

    混合子句:union

    MATCH (p:Person)-[r:ACTED_IN]->(m:Movie) RETURN p,type(r) AS rel,m
    UNION 
    MATCH (p:Person)-[r:DIRECTED]->(m:Movie) RETURN p,type(r) AS rel,m

    标签,约束和索引

    标签在图数据库中可以用来组织节点。它们也被用来限定查询,定义约束和建立索引。

    CREATE CONSTRAINT ON (movie:Movie) ASSERT movie.title IS UNIQUE
  • 相关阅读:
    LeetCode 81 Search in Rotated Sorted Array II(循环有序数组中的查找问题)
    LeetCode 80 Remove Duplicates from Sorted Array II(移除数组中出现两次以上的元素)
    LeetCode 79 Word Search(单词查找)
    LeetCode 78 Subsets (所有子集)
    LeetCode 77 Combinations(排列组合)
    LeetCode 50 Pow(x, n) (实现幂运算)
    LeetCode 49 Group Anagrams(字符串分组)
    LeetCode 48 Rotate Image(2D图像旋转问题)
    LeetCode 47 Permutations II(全排列)
    LeetCode 46 Permutations(全排列问题)
  • 原文地址:https://www.cnblogs.com/libs5510/p/4782331.html
Copyright © 2011-2022 走看看