当前位置: 首页 > news >正文

Neo4j 图数据库 高级操作

Neo4j 图数据库 高级操作

文章目录

  • Neo4j 图数据库 高级操作
    • 1 批量添加节点、关系
      • 1.1 直接使用 `UNWIND` 批量创建关系
      • 1.2 使用 CSV 文件批量创建关系
      • 1.3 选择方法
    • 2 索引
      • 2.1 创建单一属性索引
      • 2.2 创建组合属性索引
      • 2.3 创建全文索引
      • 2.4 列出所有索引
      • 2.5 删除索引
      • 2.6 注意事项
    • 3 清空所有数据
      • 3.1 删除所有节点和关系
      • 3.2 使用 APOC 扩展
      • 3.3 重置数据库(针对 Neo4j 4.0 及以上版本)
      • 3.4 删除数据库文件(仅适用于本地开发环境)
      • 3.5 注意事项

1 批量添加节点、关系

1.1 直接使用 UNWIND 批量创建关系

假设你已经有了 100,000 个节点数据和它们之间的关系数据,可以使用 UNWIND 语句来批量创建节点和关系。

  1. 批量创建节点

    首先,使用 UNWIND 创建节点。

    WITH [{eGuid: 'guid1', eId: 'id1', layer: 'layer1'},{eGuid: 'guid2', eId: 'id2', layer: 'layer2'},...{eGuid: 'guid100000', eId: 'id100000', layer: 'layer100000'}
    ] AS data
    UNWIND data AS row
    CREATE (n:Node {eGuid: row.eGuid, eId: row.eId, layer: row.layer})
    RETURN count(n)
    
  2. 批量创建关系

    假设关系数据如下:

    startGuid,endGuid,relationshipType
    guid1,guid2,RELATED_TO
    guid3,guid4,CONNECTED_TO
    ...
    guid99999,guid100000,ASSOCIATED_WITH
    

    将关系数据存储在一个列表中,并使用 UNWIND 创建关系:

    WITH [{startGuid: 'guid1', endGuid: 'guid2', relationshipType: 'RELATED_TO'},{startGuid: 'guid3', endGuid: 'guid4', relationshipType: 'CONNECTED_TO'},...{startGuid: 'guid99999', endGuid: 'guid100000', relationshipType: 'ASSOCIATED_WITH'}
    ] AS relationships
    UNWIND relationships AS rel
    MATCH (startNode:Node {eGuid: rel.startGuid}), (endNode:Node {eGuid: rel.endGuid})
    CREATE (startNode)-[r:RELATIONSHIP {type: rel.relationshipType}]->(endNode)
    RETURN count(r)
    
  3. C# 代码实现

    List<Dictionary<string, object>> nodeData = new List<Dictionary<string, object>>{new Dictionary<string, object>{{ "eGuid", guid },{ "eId", id },{ "layer", layer },}
    };
    IResultCursor batchInsertNode = await session.RunAsync(@"UNWIND $nodeData AS rowMERGE (n: PrimitiveNode { eGuid: row.eGuid, eId: row.eId, layer: row.layer})RETURN count(n)",new { nodeData });List<Dictionary<string, object>> relationData = new List<Dictionary<string, object>>{new Dictionary<string, object>{{ "startGuid", s_eGuid },{ "endGuid", t_eGuid },{ "relationName", relation },}
    };
    IResultCursor batchInsertRelation = await session.RunAsync(@"UNWIND $relationData AS relMATCH (startNode:PrimitiveNode {eGuid: rel.startGuid}), (endNode:PrimitiveNode {eGuid: rel.endGuid})MERGE (startNode)-[r:PrimitiveRelation {name: rel.relationName}]->(endNode)",new { relationData });
    

1.2 使用 CSV 文件批量创建关系

如果数据量很大,可以将数据存储在 CSV 文件中,然后使用 LOAD CSV 导入。

  1. 创建 CSV 文件

    创建两个 CSV 文件,一个用于节点数据,另一个用于关系数据。

    nodes.csv:

    eGuid,eId,layer
    guid1,id1,layer1
    guid2,id2,layer2
    ...
    guid100000,id100000,layer100000
    

    relationships.csv:

    startGuid,endGuid,relationshipType
    guid1,guid2,RELATED_TO
    guid3,guid4,CONNECTED_TO
    ...
    guid99999,guid100000,ASSOCIATED_WITH
    
  2. 加载 CSV 文件并创建节点

    LOAD CSV WITH HEADERS FROM 'file:///nodes.csv' AS row
    CREATE (:Node {eGuid: row.eGuid, eId: row.eId, layer: row.layer})
    RETURN count(*)
    
  3. 加载 CSV 文件并创建关系

    LOAD CSV WITH HEADERS FROM 'file:///relationships.csv' AS row
    MATCH (startNode:Node {eGuid: row.startGuid}), (endNode:Node {eGuid: row.endGuid})
    CREATE (startNode)-[r:RELATIONSHIP {type: row.relationshipType}]->(endNode)
    RETURN count(r)
    

1.3 选择方法

  • 如果数据结构简单,且数据量不大,可以直接在 Cypher 查询中使用 UNWIND
  • 对于大量数据,CSV 文件导入方法非常高效。
  • 使用编程语言的批量插入方法适合需要复杂逻辑处理的数据。

2 索引

2.1 创建单一属性索引

要在单个属性上创建索引,可以使用以下命令:

CREATE INDEX index_name FOR (n:Label) ON (n.property)

例如:

CREATE INDEX person_name_index FOR (p:Person) ON (p.name)

2.2 创建组合属性索引

要在多个属性上创建组合索引,可以使用以下命令:

CREATE INDEX index_name FOR (n:Label) ON (n.property1, n.property2)

例如:

CREATE INDEX person_name_dob_index FOR (p:Person) ON (p.name, p.dob)

2.3 创建全文索引

Neo4j 还支持全文索引,可以用于全文搜索。要创建全文索引,可以使用以下命令:

CALL db.index.fulltext.createNodeIndex('index_name', ['Label'], ['property'])

例如:

CALL db.index.fulltext.createNodeIndex('person_name_index', ['Person'], ['name'])

2.4 列出所有索引

要查看数据库中现有的所有索引,可以使用以下命令:

CALL db.indexes

2.5 删除索引

要删除一个索引,可以使用以下命令:

DROP INDEX index_name

例如:

DROP INDEX person_name_index

2.6 注意事项

  1. 索引创建时间:索引的创建可能需要一些时间,特别是在包含大量数据的情况下。建议在数据库维护时创建索引。
  2. 索引类型:Neo4j 支持多种类型的索引,包括 B-tree 索引、全文索引等。选择适合查询需求的索引类型。
  3. 版本差异:不同版本的 Neo4j 在索引语法和功能上可能有所不同,建议查阅对应版本的官方文档以获取准确的信息。

3 清空所有数据

3.1 删除所有节点和关系

  1. 删除所有关系

    MATCH ()-[r]-()
    DELETE r
    
  2. 删除所有节点

    MATCH (n)
    DELETE n
    

    该命令尝试直接删除匹配到的节点 n。如果节点 n 还有任何连接的关系,这条命令会失败并报错,因为 Neo4j 不允许直接删除仍然连接着关系的节点。

    使用限制:只能删除没有任何关系的孤立节点。

  3. 删除所有节点

    MATCH (n)
    DETACH DELETE n
    

    该命令不仅删除匹配到的节点 n,还会先删除与该节点连接的所有关系。这样就避免了直接删除节点时可能遇到的错误。

    使用优势:能够删除任何节点,无论它们是否连接着关系。

3.2 使用 APOC 扩展

如果安装了 APOC 扩展,可以使用更简便的方法:

CALL apoc.periodic.iterate('MATCH (n) RETURN n','DETACH DELETE n',{batchSize: 1000}
)

3.3 重置数据库(针对 Neo4j 4.0 及以上版本)

如果你使用的是 Neo4j 4.0 及以上版本,可以使用 dbms.clearDatabase() 命令重置数据库:

CALL dbms.clearDatabase()

3.4 删除数据库文件(仅适用于本地开发环境)

如果你在本地开发环境中,可以通过删除数据库文件来清空所有数据。这需要停止 Neo4j 服务,删除数据库文件,然后重新启动服务。

  1. 停止 Neo4j 服务

    neo4j stop
    
  2. 删除数据库文件

    默认情况下,数据库文件位于 data/databases/ 目录下。例如,对于默认数据库 neo4j,删除相应文件:

    rm -rf data/databases/neo4j
    
  3. 重新启动 Neo4j 服务

    neo4j start
    

3.5 注意事项

  1. 备份数据:在清空数据之前,建议先备份现有数据,以防需要恢复。
  2. 权限:确保执行清空数据操作的用户具有足够的权限。
  3. 环境:在生产环境中执行这些操作时要格外小心,确保不会影响正常运行的数据和服务。

相关文章:

Neo4j 图数据库 高级操作

Neo4j 图数据库 高级操作 文章目录 Neo4j 图数据库 高级操作1 批量添加节点、关系1.1 直接使用 UNWIND 批量创建关系1.2 使用 CSV 文件批量创建关系1.3 选择方法 2 索引2.1 创建单一属性索引2.2 创建组合属性索引2.3 创建全文索引2.4 列出所有索引2.5 删除索引2.6 注意事项 3 清…...

《RWKV》论文笔记

原文出处 [2305.13048] RWKV: Reinventing RNNs for the Transformer Era (arxiv.org) 原文笔记 What RWKV(RawKuv):Reinventing RNNs for the Transformer Era 本文贡献如下&#xff1a; 提出了 RWKV 网络架构&#xff0c;结合了RNNS 和Transformer 的优点&#xff0c;同…...

相机光学(二十九)——显色指数(Ra)

显指Ra是衡量光源显色性的数值&#xff0c;表示光源对物体颜色的还原能力。显色性是指光源对物体颜色的呈现能力&#xff0c;即光源照射在同一颜色的物体上时&#xff0c;所呈现的颜色特性。通常用显色指数&#xff08;CRI&#xff09;来表示光源的显色性&#xff0c;而显指Ra是…...

【Swoole 的生命周期,文件描述符,协程数量,以及默认值】

目录 Swoole 的生命周期 Swoole 文件描述符&#xff08;FD&#xff09;缓存 Swoole设置协程的数量 Swoole 默认值 Swoole 是一个基于 PHP 的高性能网络通信引擎&#xff0c;它采用 C 编写&#xff0c;提供了协程和高性能的网络编程支持。Swoole 支持多种网络服务器和客户端…...

“不要卷模型,要卷应用”之高考志愿填报智能体

摘要&#xff1a;李总的发言深刻洞察了当前人工智能领域的发展趋势与核心价值所在&#xff0c;具有高度的前瞻性和实践性。“大家不要卷模型&#xff0c;要卷应用”这一观点强调了在当前人工智能领域&#xff0c;应该更加注重技术的实际应用而非单纯的技术竞赛或模型优化。个性…...

k8s离线部署芋道源码后端

目录 概述实践Dockerfilek8s部署脚本 概述 本篇将对 k8s离线部署芋道源码后端 进行详细的说明&#xff0c;对如何构建 Dockerfile&#xff0c;如何整合 Nginx&#xff0c;如何整合 ingress 进行实践。 相关文章&#xff1a;[nacos在k8s上的集群安装实践] k8s离线部署芋道源码前…...

图论·Day01

P3371 P4779 P3371 【模板】单源最短路径&#xff08;弱化版&#xff09; 注意的点&#xff1a; 边有重复&#xff0c;选择最小边&#xff01;对于SPFA算法容易出现重大BUG&#xff0c;没有负权值的边时不要使用&#xff01;&#xff01;&#xff01; 70分代码 朴素板dijsk…...

hutool ExcelUtil 导出导入excel

引入依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.15</version></dependency>文件导入 public void savelist(String filepath,String keyname){ExcelReader reader Exce…...

打卡第7天-----哈希表

继续坚持✊&#xff0c;我现在看到leetcode上的题不再没有思路了&#xff0c;真的是思路决定出路&#xff0c;在做题之前一定要把思路梳理清楚。 一、四数相加 leetcode题目编号&#xff1a;第454题.四数相加II 题目描述&#xff1a; 给定四个包含整数的数组列表 A , B , C , …...

【Linux】WEB网站网络防火墙(WAF软件)Fail2ban:保护服务器免受恶意攻击的必备工具

随着互联网的迅速发展&#xff0c;服务器的安全性日益成为用户和管理员关注的焦点。恶意攻击者不断寻找机会侵入服务器&#xff0c;窃取敏感信息、破坏数据或者滥用系统资源。为了抵御这些威胁&#xff0c;许多安全工具应运而生&#xff0c;其中一款备受推崇的工具就是 Fail2ba…...

妙笔生词智能写歌词软件:创新助力还是艺术之殇?

在音乐创作日益普及和多样化的当下&#xff0c;各种辅助工具层出不穷&#xff0c;妙笔生词智能写歌词软件便是其中之一。那么&#xff0c;它到底表现如何呢&#xff1f; 妙笔生词智能写歌词软件&#xff08;veve522&#xff09;的突出优点在于其便捷性和高效性。对于那些灵感稍…...

力扣hot100-普通数组

文章目录 题目&#xff1a;最大子数组和方法1 动态规划方法2 题目&#xff1a;合并区间题解 题目&#xff1a;轮转数组方法1-使用额外的数组方法2-三次反转数组 题目&#xff1a;除自身以外数组的乘积方法1-用到了除法方法2-前后缀乘积法 题目&#xff1a;最大子数组和 原题链…...

深入浅出Transformer:大语言模型的核心技术

引言 随着自然语言处理&#xff08;NLP&#xff09;领域的不断发展&#xff0c;Transformer模型逐渐成为现代大语言模型的核心技术。无论是BERT、GPT系列&#xff0c;还是最近的T5和Transformer-XL&#xff0c;这些模型的背后都离不开Transformer架构。本文将详细介绍Transfor…...

MacOS隐藏文件打开指南

MacOS隐藏文件打开指南 方法一&#xff1a; 直接按下键盘上的【commandshift.】,这时候就可以在mac系统中就会自动显示隐藏的文件夹了 方法二&#xff1a; 在终端查看 ls -la...

grafana数据展示

目录 一、安装步骤 二、如何添加喜欢的界面 三、自动添加注册客户端主机 一、安装步骤 启动成功后 可以查看端口3000是否启动 如果启动了就在浏览器输入IP地址&#xff1a;3000 账号密码默认是admin 然后点击 log in 第一次会让你修改密码 根据自定义密码然后就能登录到界面…...

53-4 内网代理6 - frp搭建三层代理

前提:53-3 内网代理5 - frp搭建二级代理-CSDN博客 三级网络代理 在办公区入侵后,发现需要进一步渗透核心区网络(192.168.60.0/24),并登录域控制器的远程桌面。使用FRP在EDMZ区、办公区与核心区之间建立三级网络的SOCKS5代理,以便访问核心区的域控制器。 VPS上的FRP服…...

SQLite 命令行客户端 + HTA 实现简易UI

SQLite 命令行客户端 HTA 实现简易UI SQLite 客户端.hta目录结构参考资料 仅用于探索可行性&#xff0c;就只实现了 SELECT。 SQLite 客户端.hta <!DOCTYPE html> <html> <head><meta http-equiv"Content-Type" content"text/html; cha…...

TikTok小店推出“百万英镑俱乐部”,实力宠卖家!

TikTok Shop近期在英国市场重磅推出了“百万英镑俱乐部”激励计划&#xff0c;这一举措旨在通过一系列诱人福利&#xff0c;助力商家在TikTok平台上实现销售飞跃。该计划不仅彰显了TikTok Shop对于商家成长的深切关怀&#xff0c;更以实际行动诠释了“实力宠卖家”的承诺。 我…...

路径规划 | 基于蚁群算法的三维无人机航迹规划(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 基于蚁群算法的三维无人机航迹规划&#xff08;Matlab&#xff09;。 蚁群算法&#xff08;Ant Colony Optimization&#xff0c;ACO&#xff09;是一种模拟蚂蚁觅食行为的启发式算法。该算法通过模拟蚂蚁在寻找食物时…...

.Net C#执行JavaScript脚本

文章目录 前言一、安装二、执行 JavaScript 脚本三、与脚本交互四、JS 调用 C# 方法五、多线程使用总结 前言 ClearScript 是一个 .NET 平台下的开源库&#xff0c;用于在 C# 和其他 .NET 语言中执行脚本代码。它提供了一种方便和安全的方法来将脚本与应用程序集成&#xff0c;…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...