博客
关于我
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/

你可能感兴趣的文章
Opencv 完美配置攻略 2014 (Win8.1 + Opencv 2.4.8 + VS 2013)上
查看>>
opencv 模板匹配, 已解决模板过大程序不工作的bug
查看>>
OpenCV 错误:(-215)size.width>0 &&函数imshow中的size.height>0
查看>>
opencv&Python——多种边缘检测
查看>>
opencv&python——高通滤波器和低通滤波器
查看>>
OpenCV-Python接口、cv和cv2的性能比较
查看>>
opencv1-加载、修改、保存图像
查看>>
opencv10-形态学操作
查看>>
opencv11-提取水平直线和垂直直线
查看>>
opencv12-图像金字塔
查看>>
opencv14-自定义线性滤波
查看>>
opencv15-边缘处理
查看>>
opencv16-Sobel算子
查看>>
opencv17-laplance算子
查看>>
opencv2-矩阵掩膜操作
查看>>
opencv20-霍夫圆检测
查看>>
opencv21-像素重映射
查看>>
opencv22-直方图均衡化
查看>>
opencv23-直方图计算
查看>>
opencv24-直方图比较
查看>>