Java初始化大量数据到Neo4j中(二)

news2024/11/19 16:24:44

接Java初始化大量数据到Neo4j中(一)继续探索,之前用create命令导入大量数据发现太过耗时,查阅资料说大量数据初始化到Neo4j需要使用neo4j-admin import

业务数据说明可以参加Java初始化大量数据到Neo4j中(一),这里主要是将处理好的节点数据和关系数据分别导出为csv

在这里插入代码片

入口controller.java

//导出节点数据到csv文件中
@GetMapping("exportNodeData")
public void exportNodeData(HttpServletResponse response) {
    service.exportNodeData(response);
}

//导出关系数据到csv文件中
@GetMapping("exportRelationData")
public void exportRelationData(HttpServletResponse response) {
	service.exportRelationData(response);
}

service.java

//导出节点数据
 	@Override
    public void exportNodeData(HttpServletResponse response) {
    	//节点数据,按照自己的实际业务添加,我这里对应的是所有表的数据,因为我业务中所有表结果基本一样,也即节点属性都一样。每个表的数据一个map,key是表名作为节点的标签
		Map<String, List<NodeData>> nodeDataMap;

		List<Map<String,String>> data = new ArrayList<>();
        for(String key:nodeDataMap.keySet()){
            List<NodeData> dataList = nodeDataMap.get(key);
            if (StringUtils.isEmpty(key) || dataList ==null || dataList .isEmpty()) {
                continue;
            }

            for (NodeData nodeData:dataList ) {
                Map<String,String> map = new HashMap<>();
                
                String id = nodeData.getId();
                String name = nodeData.getName();
                String table = nodeData.getName();
                //因为不同表的id会重复,需要一个不重复的值作为节点唯一值(我这里用的是表id拼接表数据id)
                String uniqueValue = nodeData.getUniqueValue(); 
                map.put(":LABEL",table );
                map.put("id",id);
                map.put("name",name);
                map.put("uniqueValue:ID",uniqueValue);
                data.add(map);
            }
        }
        try {
            response.setCharacterEncoding("UTF-8");
            response.setHeader("Content-Disposition", "attachment;filename=" + new String("nodeimport.csv".getBytes(StandardCharsets.UTF_8), "ISO8859-1"));
            response.setContentType(ContentType.APPLICATION_OCTET_STREAM.toString());
            CsvWriter csvWriter =  CsvUtil.getWriter(response.getWriter()) ;
            csvWriter.writeBeans(data);
            csvWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
}

	//导出关系数据
	@Override
    public void exportRelationData(HttpServletResponse response) {
        //关系数据,将每一个表数据的关系作为RelationData实体
		List<RelationData> relationDatas;
        List<Map<String,String>> data = new ArrayList<>();
        for (RelationData relation : relationDatas)  {
            Map<String,String> map = new HashMap<>();
          
            String relationName = relation .getRelationName();
            String id = relation .getId();
            //因为节点是通过表id拼接数据id,所以关系这里也需要加上拼接后不重复的值
            //开始节点唯一的值
            String uniqueStartValue = relation .getUniqueStartValue();
            //结束节点唯一的值
            String uniqueEndValue = relation .getUniqueEndValue();
           
            map.put("relationName",relationName) ;
            map.put("id",id) ;
            map.put(":START_ID",uniqueStartValue) ;
            map.put(":END_ID",uniqueEndValue) ;
            map.put(":TYPE",relationName) ;
            data.add(map);
        }
        try {
            response.setCharacterEncoding("UTF-8");
            response.setHeader("Content-Disposition", "attachment;filename=" + new String("relationimport.csv".getBytes(StandardCharsets.UTF_8), "ISO8859-1"));
            response.setContentType(ContentType.APPLICATION_OCTET_STREAM.toString());
            CsvWriter csvWriter =  CsvUtil.getWriter(response.getWriter()) ;
            csvWriter.writeBeans(data);
            csvWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

CsvUtil用的是Hutool中的工具类,引入下面依赖即可

<dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.21</version>
        </dependency>

解释:
节点中的,
uniqueValue:ID 冒号前面可以随便写,冒号后端必须是ID,标识全局id,不可重复
:LABEL:这个是标签名,必须这样写
除了这两个以外的字段都是作为节点的属性。
导出的nodeimport.csv文件如下
在这里插入图片描述

关系中:

:START_ID:开始节点的唯一值
:END_ID:结束节点的唯一值
:TYPE:关系类型
除这三个外的字段都作为关系

导出的relationimport.csv文件如下:
在这里插入图片描述

之后找到Neo4j安装目录,找到import目录,将这个两个导出的文件放到import目录下
在这里插入图片描述
删除data\databases目录下的文件(neo4j-admin import要求是空文件 ) ,停掉Neo4j

cmd进入到bin目录,执行下面语句

neo4j-admin import --mode=csv  --nodes "E:\work_soft\neo4j-community-3.5.5-windows\neo4j-community-3.5.5\import\nodeimport.csv" --relationships "E:\work_soft\neo4j-community-3.5.5-windows\neo4j-community-3.5.5\import\relationimport.csv" --ignore-extra-columns=true --ignore-missing-nodes=true --ignore-duplicate-nodes=true

在这里插入图片描述
成功之后启动Neo4j,查看数据即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1046576.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

opencv英文识别tesseract-orc安装

文章目录 一、安装并保存所在路径二、配置环境变量1、打开高级设置2、配置环境变量三、修改tesseract.py文件中的路径,否则运行报错1、进入python所在的文件夹,找到Lib,site-packages2、搜索pytesseract3、打开py文件修改路径一、安装并保存所在路径 特别注意路径名中不能有…

离线环境harbor 搭建及使用

一 摘要 本文主要介绍harbor 的安装及使用。 二 环境信息及部署图 2.1 环境信息 名称版本备注操作系统centos7.9容器docker 23.0.1harbor2.7代理nginx待补充 2.2 架构图 说明&#xff1a; 1.harbor 核心服务里有个nginx &#xff0c;也可以用该nginx 做代理 2.proxy-ngin…

推荐几款优秀的项目报表软件

项目报表在项目工作中扮演着重要的角色&#xff0c;它是领导和客户了解项目进况的直接途径。有需求就会有市场&#xff0c;为解决传统报表制作复杂困难的问题&#xff0c;专业报表工具应运而生。 一款好用的项目报表软件可以帮助项目团队快速产出项目报表&#xff0c;实现数据…

深度学习实战54-基于ChatGLM2大模型构建智能自助用药问答系统与药物智能管理实战的应用

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下深度学习实战54-基于ChatGLM2大模型构建智能自助用药问答系统与药物智能管理实战的应用。 随着人工智能技术的发展&#xff0c;我们的生活在许多方面都得到了改善。医疗领域也不例外。本文将介绍如何利用大模型&…

【Python自动化测试】mock模块基本使用介绍

mock简介 py3已将mock集成到unittest库中为的就是更好的进行单元测试简单理解&#xff0c;模拟接口返回参数通俗易懂&#xff0c;直接修改接口返回参数的值官方文档&#xff1a;unittest.mock --- 模拟对象库 — Python 3.11.4 文档 mock作用 解决依赖问题&#xff0c;达到解…

软件测试/测试开发 | AI大模型应用开发实训营来啦~ 大模型学习资料免费领

因为 AIGC 持续火热&#xff0c;越来越多的企业都需要借助大模型来为自己的业务赋能&#xff0c;也就是产出适合自己公司业务情况的智能化产品&#xff0c;这是目前程序员必须要面对的难题和挑战。如果要在企业内部落地相关引用&#xff0c;就需要员工具备响应的大模型应用开发…

LCR 101. 分割等和子集——力扣——背包问题、动态规矩

问题描述 代码展示 class Solution:def canPartition(self, nums: List[int]) -> bool:if len(nums) < 1:return Falsetotal_sum sum(nums)if total_sum % 2 ! 0: # 总和为奇数&#xff0c;无法分成两个相等的子集return Falsetarget_sum total_sum // 2dp [[False]…

el-tooltip内容换行显示

效果图&#xff1a; html: <div class"rules-tooltip flex-center"><el-tooltip class"item" effect"dark" placement"bottom-start"><div slot"content" v-html"tipsContent"></div>&l…

工具篇 | WSL使用入门教程以及基于WSL和natApp内网穿透实践 - 对比VMWare

介绍 在开发工具中&#xff0c;Windows Subsystem for Linux (WSL) 和 VMWare 它们都可以实现了在 Windows 上运行 Linux系统。 文章概览 WSL Vs VMWare 我们将简单比对 WSL 和 VMWare&#xff0c;在性能、资源消耗等方面的差异&#xff0c;以协助您做出更加明确的选择。 …

专业级操作,如何快速批量虚化多个视频的背景边框

如果你是一名视频编辑爱好者&#xff0c;或者是一名需要处理大量视频素材的专业人士&#xff0c;那么你可能会对如何快速处理和虚化视频的背景边框感到困惑。这里&#xff0c;我们就为你提供一种方法&#xff0c;使用固乔剪辑助手工具&#xff0c;你可以轻松实现批量虚化多个视…

ATA-8000系列射频功率放大器——应用场景介绍

ATA-8000系列是一款射频功率放大器。其P1dB输出功率500W&#xff0c;饱和输出功率最大1000W。增益数控可调&#xff0c;一键保存设置&#xff0c;提供了方便简洁的操作选择&#xff0c;可与主流的信号发生器配套使用&#xff0c;实现射频信号的放大。 图&#xff1a;ATA-8000系…

Kubernetes基本概念简介

零 引入 在传统的应用程序部署中&#xff0c;需要手动配置和管理服务器、网络和存储等基础设施&#xff0c;并且随着应用程序规模的增长&#xff0c;管理复杂性也会大大增加。Kubernetes通过自动化和抽象化的方式&#xff0c;解决了这些挑战&#xff0c;使得应用程序可以以一种…

sdk下载慢的解决办法

Android studio版本&#xff1a;为Android Studio 4.1.1&#xff0c; 先完成Android Studio软件安装&#xff0c;打开Android Studio&#xff0c;点击File -> settings->Android SDK&#xff0c;按照开发需要安装sdk platform、SDK Tools工具。 sdk下载慢解决办法 1、…

Nuxt 菜鸟入门学习笔记六:路由

文章目录 路由 Routing页面 Pages导航 Navigation路由参数 Route Parameters路由中间件 Route Middleware路由验证 Route Validation Nuxt 官网地址&#xff1a; https://nuxt.com/ 路由 Routing Nuxt 的一个核心功能是文件系统路由器。pages/目录下的每个 Vue 文件都会创建一…

【ACL2023】Event Extraction as Question Generation and Answering

论文题目&#xff1a;Event Extraction as Question Generation and Answering 论文来源&#xff1a;ACL2023 论文链接&#xff1a;Event Extraction as Question Generation and Answering - ACL Anthology 代码链接&#xff1a;GitHub - dataminr-ai/Event-Extraction-as-…

PowerDsigner 数据库逆向pdm数模 常见数据库连接问题

本文章记录本人在使用powerdsigner工具&#xff0c;反向工程生成项目数据库表结构以及表关系的过程中遇到的两个常见问题。 问题1&#xff1a;Could not Initialize JavaVM 问题2&#xff1a;Non SQL Error : Could not load class oracle.jdbc.OracleDriver 环境&#xff1…

枚举enum

使用enum关键字定义提供枚举类的对象&#xff0c;多个对象用逗号分开&#xff0c;结尾用分号结束提供构造方法&#xff0c;给属性赋值使用public statiac final来修饰是属性提供get方法提供toString方法 public enum Season {SPRING("春天", "春暖花开"),…

都用HTTPS了,还能被查出浏览记录?

最近&#xff0c;群里一个刚入职的小伙因为用公司电脑访问奇怪的网站&#xff0c;被约谈了。他很困惑 —— 访问的都是HTTPS的网站&#xff0c;公司咋知道他访问了啥&#xff1f; 实际上&#xff0c;由于网络通信有很多层&#xff0c;即使加密通信&#xff0c;仍有很多途径暴露…

达梦数据库使用杂记

1、DM管理工具打开后一片白 这是因为上一次把对象导航窗口手动关闭了&#xff0c;后面再重新打开时默认就不显示了&#xff1b; 只需要到窗口-视图-对象导航 打开即可 2、 查询语句需要带表空间名&#xff0c;如&#xff1a;select * from "表空间名"."表名&…

混合IT基础设施的安全挑战与缓解策略

自从“身份是新的边界”这句格言问世以来&#xff0c;公司已经开始扩展他们的能力和运营&#xff0c;超越了基于本地、办公室基础设施的范围。采用云原生技术意味着组织正在寻求扩大传统工作流程&#xff0c;而无需投入时间和资源来建立物理数据中心和其他硬件基础设施。 身份…