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

使用 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

http://www.cnnetsun.cn/news/165630.html

相关文章:

  • 编译效率低?Open-AutoGLM优化秘技曝光,90%开发者都不知道
  • 收藏!35岁程序员转行大模型:从0到1的落地指南(附避坑攻略)
  • 10 个AI论文工具,MBA毕业论文轻松搞定!
  • 10个降AI率工具,专科生必备避坑指南
  • Python+Vue的闲置物品交易网站 租赁,购买2种模式 Pycharm django flask
  • 安全工具集:一站式密码生成、文件加密与二维码生成解决方案
  • 【独家披露】Open-AutoGLM实时状态追踪技术内幕(仅限专业人士)
  • Linly-Talker在殡葬纪念服务中的情感表达设计
  • 伺服系统机械特性分析频率特性辨识Matlab仿真探究
  • Linly-Talker在法庭证据陈述回放中的严谨性保障
  • 模型性能突飞猛进,Open-AutoGLM自适应调整究竟有何秘密?
  • 基于微信小程序的大学校园失物招领系统的设计与实现
  • Linly-Talker在肢体残疾者智能家居控制中的便利性
  • 基于SpringBoot的校园失物招领可视化系统
  • Linly-Talker在视障人士文字朗读中的语调优化
  • 揭秘Open-AutoGLM高并发瓶颈:5步优化法让API响应速度飙升
  • 【千万级任务调度背后】:Open-AutoGLM实时监控系统设计深度解析
  • Google Guava:现代Java编程的秘密武器
  • 揭秘Open-AutoGLM操作验证难题:3步实现结果零误差
  • 为什么你的Open-AutoGLM效果不佳?动态调参缺失这4个步骤
  • 为什么顶尖团队都在改写注意力权重?(Open-AutoGLM架构深度剖析)
  • 【好写作AI】为毕业论文注入灵魂:AI如何辅助你提炼创新点与理论/实践价值?
  • Linly-Talker在高校科研教学中的示范作用
  • Linly-Talker能否接入钉钉/企业微信?办公场景拓展
  • 【独家】Open-AutoGLM参数动态调节内幕:一线专家亲授5大法则
  • 提升品牌科技感:用Linly-Talker定制企业代言人
  • 【视觉AI效率革命】:基于Open-AutoGLM的注意力稀疏化优化实践
  • 测试框架迭代的必要性与兼容性挑战
  • Linly-Talker在远程教学中的应用价值分析
  • 基于YOLOv10的红外太阳能板缺陷检测系统(YOLOv10深度学习+YOLO数据集+UI界面+Python项目源码+模型)