博客
关于我
Neo4j图数据库
阅读量:119 次
发布时间:2019-02-26

本文共 2452 字,大约阅读时间需要 8 分钟。

Cypher代码优化与实用示例

Cypher是Neo4j图数据库的查询语言,提供了强大的数据处理能力。以下是一些实用的Cypher代码示例和优化技巧,帮助您更高效地处理数据。

1. 数据导入与处理

使用LOAD CSV导入CSV文件

可以通过Cypher轻松导入CSV文件,例如Inventory.csv:

LOAD CSV WITH HEADERS FROM "file:///Inventory.csv" AS rowMERGE (s:Store {name: row.store})MATCH (c:City {name: row.store})MERGE (s)-[:IN_CITY]-(:City {name: row.store}) WITH *MATCH (p:Product {sku: row.sku})MERGE (s)-[:INVENTORY]->(p) SET p.count = toInt(row.number) RETURN *

此外,也可以使用apoc.load.json导入JSON文件:

CALL apoc.load.json("reviews.json") YIELD value AS rowMATCH (c:Customer {customerid: toString(row.customerid)})MATCH (p:Product {sku: toString(row.sku)})MERGE (c)-[:REVIEWED]->(:Product {sku: row.sku}) SET :rating = round(toFloat(row.review)) RETURN *

请确保启用apoc.import.file.enabled=true

2. 社区功能与分析

使用Union-Find算法

Cypher提供了algo.unionFind函数,用于节点聚类:

CALL algo.unionFind(label:String, relationship:String, {weightProperty: 'weight', threshold: 0.42, defaultValue: 1.0, write: true, partitionProperty: 'partition'}) YIELD nodes, setCount, loadMillis, computeMillis, writeMillis

参数说明:

  • label:节点类别
  • relationship:关系类别,可选
  • weightProperty:权重属性
  • threshold:边界值
  • defaultValue:默认值(为空时填充)
  • write:是否写入结果

并发处理

如果需要并发处理,可以设置concurrency限制:

CALL algo.unionFind.stream('User', 'FRIEND', {weightProperty: 'weight', defaultValue: 0.0, threshold: 1.0, concurrency: 1}) YIELD nodeId, setIdRETURN algo.getNodeById(nodeId).id AS user, setId

3. 数据清理操作

删除全部数据

使用detach确保引用关系被删除:

MATCH (n) DETACH DELETE n

查看数据库结构

查询数据库元数据:

CALL apoc.meta.graph == call db.schema()

4. With语句的使用

聚合过滤查询

MATCH (n {name: "John"}) - [:friend] -> (friend)WITH n, count(friend) AS friendsCountWHERE friendsCount > 3RETURN n, friendsCount

聚合更新操作

MATCH (n {name: 'John'}) - [:friend] -> (friend)WITH n, count(friend) AS friendsCountSET n.friendsCount = friendsCountRETURN n.friendsCount

5. 集合操作

收集匹配结果

MATCH (p:Person) - [:ACTED_IN] -> (m:Movie)WITH p, count(*) AS appearances, collect(m.title) AS moviesWHERE appearances > 1RETURN p, appearances, movies

优化匹配

使用OPTIONAL处理不匹配情况:

MATCH (p:Person) - [:ACTED_IN]->(m:Movie)WITH p, OPTIONAL MATCH (m2:Movie) - [:ACTED_IN]->(p)RETURN p, COLLECT(m.title) AS movies

6. 图算法与APOC功能

查看图算法

查询所有图算法:

CALL dbms.procedures() YIELD name, signature, descriptionWHERE name starts with "algo" RETURN name, signature, description

查看APOC功能

查询APOC插件:

CALL dbms.procedures() YIELD name, signature, descriptionWHERE name starts with "apoc" RETURN name, signature, description

通过这些示例,您可以高效地处理数据,优化数据库性能,并利用Cypher的强大功能进行数据分析。

转载地址:http://wzru.baihongyu.com/

你可能感兴趣的文章
NetworkX系列教程(11)-graph和其他数据格式转换
查看>>
Networkx读取军械调查-ITN综合传输网络?/读取GML文件
查看>>
Net与Flex入门
查看>>
net包之IPConn
查看>>
NFinal学习笔记 02—NFinalBuild
查看>>
NFS共享文件系统搭建
查看>>
nfs复习
查看>>
NFS网络文件系统
查看>>
nft文件传输_利用remoting实现文件传输-.NET教程,远程及网络应用
查看>>
ng 指令的自定义、使用
查看>>
nginx + etcd 动态负载均衡实践(二)—— 组件安装
查看>>
nginx + etcd 动态负载均衡实践(四)—— 基于confd实现
查看>>
Nginx + Spring Boot 实现负载均衡
查看>>
Nginx + uWSGI + Flask + Vhost
查看>>
Nginx - Header详解
查看>>
Nginx Location配置总结
查看>>
Nginx upstream性能优化
查看>>
Nginx 中解决跨域问题
查看>>
Nginx 动静分离与负载均衡的实现
查看>>
Nginx 反向代理 MinIO 及 ruoyi-vue-pro 配置 MinIO 详解
查看>>