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

你可能感兴趣的文章
Objective-C实现快速排序(附完整源码)
查看>>
Objective-C实现快速排序算法(附完整源码)
查看>>
Objective-C实现恩尼格玛密码机算法(附完整源码)
查看>>
Objective-C实现感知哈希算法(附完整源码)
查看>>
Objective-C实现感知哈希算法(附完整源码)
查看>>
Objective-C实现截留雨水问题的动态编程方法算法(附完整源码)
查看>>
Objective-C实现截留雨水问题的蛮力方法的算法(附完整源码)
查看>>
Objective-C实现打印10000以内的完数(附完整源码)
查看>>
Objective-C实现打印1000以内的水仙花数(附完整源码)
查看>>
Objective-C实现打印九九乘法表(附完整源码)
查看>>
Objective-C实现打印从 0 到 n 的卡特兰数算法(附完整源码)
查看>>
Objective-C实现打印函数调用堆栈( 附完整源码)
查看>>
Objective-C实现打印月份的日历算法(附完整源码)
查看>>
Objective-C实现打印杨辉三角(附完整源码)
查看>>
Objective-C实现打印某年的历法日期(附完整源码)
查看>>
Objective-C实现打印魔方矩阵(附完整源码)
查看>>
Objective-C实现打格点算法(附完整源码)
查看>>
Objective-C实现批量修改文件类型算法(附完整源码)
查看>>
Objective-C实现找出一个数的质因数primeFactors算法(附完整源码)
查看>>
Objective-C实现找出三角形从上到下的最大路径算法(附完整源码)
查看>>