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

你可能感兴趣的文章
QT程序怎么挪到Linux下,linux+Qt程序如何打包发布
查看>>
Qt知识:视图框架QGraphicsWidget详解
查看>>
SpringBoot中项目启动及定时任务缓存数据库常用数据至内存变量并转换后高频调用
查看>>
Qt知识: 画刷风格
查看>>
QT的OpenGL渲染窗QOpenGLWidget Class
查看>>
QT的C++程序加载动态链接库DLL(Linux下是so)的方式
查看>>
QT界面操作1:如何跟踪鼠标位置?
查看>>
Qt环境搭建(Visual Studio)
查看>>
QT点击"X"按钮,调用closeEvent()函数来实现调用特定事件(附:粗略介绍QT的信号与槽的使用方法)...
查看>>
QT样式表——url路径
查看>>
QT数据库(三):QSqlQuery使用
查看>>
QT教程5:消息框
查看>>
SpringBoot中集成阿里开源缓存访问框架JetCache实现声明式实例和方法缓存
查看>>
pom.xml中提示web.xml is missing and <failonmissingw>...
查看>>
Pomelo开发中Web客户端开发API简介
查看>>
QT教程2:QT5的体系构架
查看>>
PON架构(全光网络)
查看>>
PoolingHttpClientConnectionManager原理剖析
查看>>
QT教程1:ubuntu18.04安装QT5
查看>>
POP-一个点击带有放大还原的动画效果
查看>>