`

neo4j笔记

阅读更多
APOC功能
  Text and Lookup Indexes(文本和索引查找)
      提供索引查询、管理、全文图标和搜索等功能
  Utility Functions(实用函数)
      域名提取、时间和日期、数据格式转换等功能
  Graph Algorithms(图算法)
      社区检测、PageRank、中心算法等
  Spatial(空间函数)
      地理编码、位置计算、空间与时间搜索等
  Data integration(数据集成)
      JSON、JDBC、csv等格式数据加载
  Graph Refactorings(图形重构)
      节点合并、属性规范与分类等
  Virtual Nodes/Rels(虚拟节点/关系)
      提供虚拟图的创建
  Cypher Operations(Cypher操作)
      单个和多个的Cypher语句运行和脚本运行
  Triggers(触发器)
      与关系型数据库的触发器的理解方式一样

安装APOC
  两个Jar包,放到neo4j的plugins目录下
    apoc-3.4.0.3-all.jar
    mysql-connector-java-5.1.21.jar


APOC数据集成-JDBC
apoc.load.jdbc : 可以访问提供JDBC驱动程序的数据库,并执行查询。其将结果变成以一行数据为单位的数据流。然后可以使用这些行来更新或创建图形数据结构
  APOC JDBC 语法
call
apoc.load.jdbc("jdbc:mysql://{IP}:{PORT}/{DBNAME}?user={USERNAME}&password={PASSWORD}","{TABLENAME}") yield row

创建节点的语句,使用row. 调用每一行中的具体字段。

create
(b:Black{number:row.black_id,type:row.type})


Cypher Neo4j的SQL
启动neo4j
进入neo4j-community-3.4.1
./bin/neo4j start

访问地址:localhost:7474/broswer

语法讲解
match 相当于 SQL select

match
     (node)-[relationship]->(node)
where
     (node | relationship)
return
     (node | relationship)

例:
最简单的查询
match (n:Person) return n limit 10
这里的 n 相当于 SQL 中的别名 as n

带有关系的查询
match (n:Person)-[:HAS_PHONE]->(p:Phone) return n,p limit 10

带有Where 条件的查询
match (n:Person)-[:HAS_PHONE]->(p:Phone) where n.name="姓名5" return n,p limit 10

多对多关系的查询
match (n:Person)-[:HAS_PHONE]->(p:Phone) -[:CALL]->(p1:Phone) where n.name="姓名6" return n,p,p1 limit 10

利用关系查询
match p=()-[c:CALL]-() return p limit 10

利用正则查询
match (n:USERS) where n.name=~'Jack.*' return n limit 10

包含查询
match (n:USERS) where n.name contains 'J' return n limit 10


创建实体的关系
create (n:Person)-[:LOVES]->(m:Dog)
match (n:Dog) return n limit 25

创建有属性的实体的关系
create (n:Person{name:"李四"})-[:FEAR{level:1}]->(t:Tiger{type:"东北虎"})
match (n:Tiger) return n limit 25

创建孤立实体
create (n:Person{name:"王五"})
create (n:Person{name:"赵六"})

两个实体挂上关系
  查询两个实体
match (n:Person{name:"王五"}),(m:Person{name:"赵六"})

  挂上关系
match (n:Person{name:"王五"}),(m:Person{name:"赵六"}) create (n)-[k:KNOW]->(m) return k

match (n:Person{name:"王五"}),(m:Person{name:"赵六"})

merge 有则返回,没有则新增
match (n:Person{name:"王五"}),(m:Person{name:"赵六"}) merge (n)-[l:LOVE]->(m) return l

match (n:Person{name:"王五"}),(m:Person{name:"赵六"})


删除关系
match (n:Person{name:"李四"})-[f:FEAR]->(t:Tiger) delete f

删除实体
match (n:Person{name:"李四"}) delete n

同时删除实体与关系
match (n:Person)-[l:LOVES]->(d:Dog) delete n,l,d

更新实体标签
match (t:Tiger) where id(t) = 1837 set t:A return t
一个实体可以对应多个标签

更新实体的属性
match (a:A) where id(a)=1837 set a.年龄=10 return a limit 10

更新关系的属性
match (n:Phone)-[l:LOVES]-(:Person) set l.date="1991" return n,l

索引:能够提高查询速度
语法: create index on :<标签名称>(属性名称)

创建索引
create index onerson(name)

删除索引
drop index onerson(name)

创建唯一索引/约束
create constraint on (p:Person) assert (p.name) is unique
删除约束
drop constraint on (p:Person) assert (p.name) is unique


查询 姓名12 他的,三度内的朋友有哪些
match (p:Person)-[:FRIEND_OF]-(p1:Person)-[:FRIEND_OF]-(p2:Person) where p.name="姓名12" return p,p1,p2

查询姓名12 三度内有关系的人有哪些
match (p:Person)-[]-(p1:Person)-[]-(p2:Person) where p.name="姓名12" return p,p1,p2

姓名11 的通话记录中的电话有哪些
match (p:Person)-[:HAS_PHONE]->(p2:Phone)-[:CALL]-(h:Phone) where p.name="姓名11" return p,p2,h

查询姓名2到姓名10的最短路径
match (p1:Person{name:"姓名2"}),(p2:Person{name:"姓名10"}), p=shortestpath((p1)-[*..10]-(p2)) return p


查询姓名2到姓名10的所有最短路径
match (p1:Person{name:"姓名2"}),(p2:Person{name:"姓名10"}), p=allshortestpaths((p1)-[*..10]-(p2)) return p


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics