news 2026/6/22 23:49:35

使用 Node.js Elasticsearch 客户端索引大型 CSV 文件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用 Node.js Elasticsearch 客户端索引大型 CSV 文件

作者:来自 Elastic joshmock

使用 bulk API 可以轻松地将大量文档索引到 Elasticsearch:将你的数据记录转换为 JSON 文档,并插入指示它们应该添加到哪个索引的指令,然后将这个大的换行分隔 JSON blob 作为请求体,通过单个 HTTP 请求发送到 Elasticsearch 集群。或者,使用 Node.js 客户端的 bulk 函数。

更多阅读:Elasticsearch:使用最新的 Nodejs client 8.x 来创建索引并搜索

下面演示如何读取 CSV 文件,将其行转换为 JSON 对象,并进行索引:

import { Client } from '@elastic/elasticsearch' import { parse } from "csv-parse/sync" import { readFileSync } from 'node:fs' const csv = parse(readFileSync('data.csv', 'utf8'), { columns: true }) const operations = csv.flatMap(row => [ { index: { _index: "my_index" } }, row ]) const client = new Client({ node: 'http://localhost:9200' }) await client.bulk({ operations })

但是,如果你需要发送的数据量超过 Elasticsearch 单次请求能接收的大小,或者你的 CSV 文件太大,无法一次性全部加载到内存中,该怎么办?这时可以使用 bulk helper!

虽然 bulk API 本身已经很简单,但对于更复杂的场景,helper 提供了对流式输入的支持,可以将大型数据集拆分为多个请求等。

例如,如果你的 Elasticsearch 服务器只能接收小于 10MB 的 HTTP 请求,你可以通过设置 flushBytes 值来指示 bulk helper 拆分数据。每当请求即将超过设置值时,就会发送一次 bulk 请求:

const csv = parse(readFileSync('data.csv', 'utf8'), { columns: true }) await client.helpers.bulk({ datasource: csv, onDocument(doc) { return { index: { _index: "my_index" } } }, // send a bulk request for every 9.5MB flushBytes: 9500000 })

或者,如果你的 CSV 文件太大无法一次性加载到内存中,helper 可以将流作为数据源,而不是使用数组:

import { createReadStream } from 'node:fs' import { parse } from 'csv-parse' const parser = parse({ columns: true }) await client.helpers.bulk({ datasource: createReadStream('data.csv').pipe(parser), onDocument(doc) { return { index: { _index: "my_index" } } } })

这会将 CSV 文件中的行缓冲到内存中,解析为 JSON 对象,并让 helper 将结果刷新为一个或多个 HTTP 请求发送出去。这个解决方案不仅节省内存,而且阅读起来也和将整个文件加载到内存中的方法一样简单!

原文:https://discuss.elastic.co/t/dec-9th-2025-en-use-the-node-js-elasticsearch-client-to-index-large-csv-files/382901

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 11:38:59

编译效率低?Open-AutoGLM优化秘技曝光,90%开发者都不知道

第一章:编译效率低?Open-AutoGLM优化秘技曝光,90%开发者都不知道在大型语言模型(LLM)的本地化部署与微调过程中,编译效率低下是制约开发迭代速度的关键瓶颈。Open-AutoGLM 作为开源自动代码生成与优化框架&…

作者头像 李华
网站建设 2026/6/23 4:07:52

收藏!35岁程序员转行大模型:从0到1的落地指南(附避坑攻略)

很多35岁程序员面临职业瓶颈时,会陷入“继续坚守旧赛道还是转向新领域”的纠结。而当下,大模型技术的爆发式发展,正为这类程序员提供了一条高潜力的转行出路。但不少人会顾虑:35岁再从零学习大模型,来得及吗&#xff1…

作者头像 李华
网站建设 2026/6/23 7:58:03

10 个AI论文工具,MBA毕业论文轻松搞定!

10 个AI论文工具,MBA毕业论文轻松搞定! AI 工具如何助力论文写作,轻松应对学术挑战 在当前的学术环境中,MBA 学生正面临越来越高的论文写作要求。无论是案例分析、管理研究还是实证报告,都需要严谨的逻辑结构和高质量的…

作者头像 李华
网站建设 2026/6/23 16:59:26

10个降AI率工具,专科生必备避坑指南

10个降AI率工具,专科生必备避坑指南 AI降重工具:专科生论文的“隐形助手” 在当今学术写作中,随着AI技术的广泛应用,论文的AIGC率问题日益受到关注。许多专科生在撰写论文时,常常因为使用AI辅助生成内容而面临查重率过…

作者头像 李华
网站建设 2026/6/23 6:36:44

Python+Vue的闲置物品交易网站 租赁,购买2种模式 Pycharm django flask

收藏关注不迷路!!需要的小伙伴可以发链接或者截图给我 项目展示 项目编号:296详细视频演示 请联系我获取更详细的演示视频 感兴趣的可以先收藏起来,还有大家在毕设选题(免费咨询指导选题),项目以…

作者头像 李华
网站建设 2026/6/23 16:59:25

安全工具集:一站式密码生成、文件加密与二维码生成解决方案

在数字化时代,数据安全与信息传递效率成为个人和企业关注的重点。本文将介绍一个集密码生成、文件加密、二维码生成功能于一体的综合性安全工具网站,并科普其背后的技术原理,帮助用户理解工具价值的同时掌握安全实践方法。 https://iris.fin…

作者头像 李华