neo4j 常用命令

Published in categories blog  Technology  tagged with #neo4j  #NoSQL  #Cypher 

neo4j 是一种图数据库,图数据库着重于数据之间的关系,而非数据本身的信息。一个 RDBMS 被优化用于聚合数据。而 neo4j 擅长于高度关联的数据。 优点是插入查询方便,搜索便利方法方便。缺点是超大节点的操作慢。

neo4j 模型建立

neo4j 中的概念: 节点,关系,属性,标签(针对节点),类型(针对关系)

属性:重要的数据结构,不同于关系数据库模型的特征。节点和关系可以具有任意数量的属性,重要的key/value 。

用标签可以扩展属性组,用于将节点划分到特定集合。

模型中的元素可以是显式和隐式(是否直接作为节点),也可以是不变或者可变的。

neo4j 开发

  1. 通过核心 Java API(系统级)
  2. 通过查询语言 Cypher(易读,结构强大)
    1. 查找起始节点
          START user = node(1)

    2. 跟随关系遍历图形
          MATCH (user)-r: HAS_SEEN-(movie)

    3. 返回最终节点。
          RETURN movie

 Cypher 基本句法

 

  • start - 查找图形中的起始节点
  • match - 匹配图形模式,可以定位子图形
  • where - 基于某种标准过滤数据
  • return - 返回感兴趣的结果
  1. 模式匹配
  2. 节点和关系连接
  3. 两个关系链接三个节点
  4. 多个模式同时匹配

  5. 查找节点     
    • 通过id
    • 通过INDEX  START john = n: User(name: “”)
    • 查询多个起始节点   START john = n: User(name: “”), jack = n: User(name: “”)
    • 分页结果: ORDER  结果排序 SKIP  进行分页 LIMIT  限定输出数量
  6. 过滤数据 可以通过正则表达式过滤 WHERE friend.mail = /@gmail.com/

  7. 返回结果 返回属性,关系,路径以及分页结果
  • ORDER 排序
  • SKIP 跳到指定的页
  • LIMIT 限制输出数量
  1. 更新节点数据

建立新节点和查找已有节点 CREATE语句 设置节点对应的关系

CREATE
(:{})- [:{}] ->(:{}) RETURN

  1. 删除数据 DELETE 注意选择删除节点,关系

  2. 更新节点和关系属性 SET john.yob = 1973

8.删除属性 start n= john delete n.name

高级 Cypher

  1. 数据聚合

非聚合条目(节点),聚合函数(COUNT)

  1. Cypher函数, p = (n)->r: IS_FRIEND_OF*1..3-()

NODES(path)

HAS(Entity.propertyName)

ALL(),  NONE(), SINGLE()

  1. 链式查询一个查询的输出链接到另一个查询 MATCH  n-r-() with TYPE(r) as TYPE, count(*) AS COUNT where COUNT >1

命名with 语句中的输出字段是强制性的。

  • shortestpath
  • allshortestpaths extract( x in collection | expression ) 例如:

其他

  1. 从 CSV 文件导入到 Neo4j

     LOAD CSV WITH HEADER FROM "url" AS row
     MERGE (src:Character {name: row.Source})
     MERGE (tgt:Character {name: row.Target})
     MERGE (src)-[r:INTERACTS]->(tgt)
     SET r.weight = toInt(row.Weight)
    
  2. 一次显示多个点 MATCH (n:uid) WHERE n.name IN [‘724972’,’704332’,’724747’] RETURN \3.

Tips

  1. 首次登陆必须修改密码,否则无法使用
  2. neo4j 默认只能从本机访问,如果需要从外网访问,修改配置文件即可。
  3. 网页控制台(基于网页的接口)
  4. 添加 APOC 时,需要将jar文件放在default.graphdb下的plugins,重启即可。
  5. 步长为2的路径 ()-[*2]-()
  6. match (a)-[*2]->(b) where a.name=‘Kaine‘ and not (a)-[*1]->(b) return a,b
  7. ()-[*..2]-() 步长不超过2
  8. $match (n) where EXISTS(n.is_black) return n limit 5 查看属性是否存在

MAX  DESC

新建一个node,包括变量名和label,并添加属性。

可以做以下尝试:

使用Match和属性查找一个节点。

使用Match和关系查找相关节点。

使用Match进行推荐。

使用Match寻找最多4跳以内的节点。

使用Match寻找两节点之间的最短路径

https://github.com/linonetwo/neo4j-tutorial-Chinese/blob/master/Chapters/1.md

http://www.infoq.com/cn/articles/graph-nosql-neo4j

refrences:

  1. http://www.blogs8.cn/posts/AtIte8c
  2. http://neo4j.com/docs/developer-manual/current/cypher/syntax/patterns/
comments powered by Disqus