news 2026/5/26 3:16:24

使用 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/5/26 4:56:30

还在手动管理代码版本?Open-AutoGLM自动化方案让你效率提升90%

第一章:还在手动管理代码版本?是时候告别低效运维了 在现代软件开发中,手动管理代码版本不仅效率低下,还极易引发错误。开发者可能曾经历过因覆盖他人代码、丢失历史版本或无法追溯变更而导致项目延期的情况。这些问题的根本原因在…

作者头像 李华
网站建设 2026/5/25 10:42:40

Open-AutoGLM接口优化终极方案,掌握这5招让你领先同行3年

第一章:Open-AutoGLM接口优化的认知革命在人工智能与自然语言处理快速演进的背景下,Open-AutoGLM作为新一代自研大语言模型推理框架,正引发接口设计领域的认知重构。其核心突破不仅在于性能提升,更在于对接口抽象层级的重新定义—…

作者头像 李华
网站建设 2026/5/25 12:34:42

Open-AutoGLM高效调用避坑指南,这6个常见错误你中招了吗?

第一章:Open-AutoGLM高效调用的核心理念Open-AutoGLM 是面向大规模语言模型自动化调用与任务编排的开放框架,其核心理念在于通过声明式接口与动态调度机制实现高效、低延迟的模型服务调用。该框架强调“意图优先”的交互模式,开发者只需定义任…

作者头像 李华
网站建设 2026/5/26 5:56:31

Open-AutoGLM自适应调参指南,手把手教你打造高响应AI模型

第一章:Open-AutoGLM自适应调参的核心理念Open-AutoGLM 是一种面向大语言模型训练过程的自动化调参框架,其核心目标是通过动态感知训练状态与模型表现,实现超参数的实时优化。该系统摒弃了传统手动调参或网格搜索的低效方式,转而采…

作者头像 李华
网站建设 2026/5/26 5:54:46

智能体实战系列(二)|智能体「行动后反思」的自动化Demo

实战背景:智能体「行动后反思」的自动化:我们如何让系统从错误日志中生成改进用例 概述 本项目是一个基于智能体「行动后反思」的自动化:我们如何让系统从错误日志中生成改进用例观点和方法实现的Python智能体Demo,旨在验证智能…

作者头像 李华
网站建设 2026/5/26 5:55:23

vue基于Python酒店管理系统的设计与实现pycharm django flask

收藏关注不迷路!!需要的小伙伴可以发链接或者截图给我 项目介绍 本系统共有管理员,员工,用户3个角色,具体功能如下: 1.管理员角色的功能主要包括管理员登录,员工管理,用户管理,酒店客房管理&…

作者头像 李华