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

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

Cypher代码优化与实用示例

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

1. 数据导入与处理

使用LOAD CSV导入CSV文件

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

LOAD CSV WITH HEADERS FROM "file:///Inventory.csv" AS row
MERGE (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 row
MATCH (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, setId
RETURN 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 friendsCount
WHERE friendsCount > 3
RETURN n, friendsCount

聚合更新操作

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

5. 集合操作

收集匹配结果

MATCH (p:Person) - [:ACTED_IN] -> (m:Movie)
WITH p, count(*) AS appearances, collect(m.title) AS movies
WHERE appearances > 1
RETURN 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, description
WHERE name starts with "algo" RETURN name, signature, description

查看APOC功能

查询APOC插件:

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

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

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

你可能感兴趣的文章
NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
查看>>
NISP国家信息安全水平考试,收藏这一篇就够了
查看>>
NIS服务器的配置过程
查看>>
Nitrux 3.8 发布!性能全面提升,带来非凡体验
查看>>
NiuShop开源商城系统 SQL注入漏洞复现
查看>>
NI笔试——大数加法
查看>>
NLog 自定义字段 写入 oracle
查看>>
NLog类库使用探索——详解配置
查看>>
NLP 基于kashgari和BERT实现中文命名实体识别(NER)
查看>>
NLP 模型中的偏差和公平性检测
查看>>
Vue3.0 性能提升主要是通过哪几方面体现的?
查看>>
NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
查看>>
NLP_什么是统计语言模型_条件概率的链式法则_n元统计语言模型_马尔科夫链_数据稀疏(出现了词库中没有的词)_统计语言模型的平滑策略---人工智能工作笔记0035
查看>>
NLP三大特征抽取器:CNN、RNN与Transformer全面解析
查看>>
NLP学习笔记:使用 Python 进行NLTK
查看>>
NLP度量指标BELU真的完美么?
查看>>
NLP的不同研究领域和最新发展的概述
查看>>
NLP的神经网络训练的新模式
查看>>
NLP采用Bert进行简单文本情感分类
查看>>
NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估
查看>>