办公文档
用 bulk API 把本地 CSV/JSON…
需要把本地 CSV、JSON 数组或 NDJSON 文件批量导入 Elasticsearch 索引,并确保字段类型正确、文档数可验证时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
用 bulk API 把本地 CSV/J特定
解决思路
- 确认连通性:调用 `GET /`(CLI:`elastic es info`),失败则先解决 CLI 配置,再读取文件或修改集群状态。
- 检查源文件并分类其形态:CSV(首行为逗号分隔表头,后续为记录,统计数据行数不含表头);JSON 数组(以 `[` 开头,统计数组元素数,每个元素对应一个文档);NDJSON(每行一个 JSON 值,可能已含 action 行或需要补充)。绝不把原始 CSV 文本或原始 JSON 数组直接发给 `POST /_bulk`。
- 选择目标索引名:使用用户提供的名称,或根据文件名提出一个小写名称;索引名必须小写,不能含空格或 `/`,且不应以 `-`、`_`、`+` 开头。
- 判断是否需要显式映射:若索引可能已存在,调用 `GET /{index}/_mapping`(CLI:`elastic es indices get-mapping --index '<index>'`)。当 CSV 列含需要按类型查询的数字、日期或布尔值,或用户要求可用列类型/可聚合字段,或此前加载把一切索引为 text/keyword 字符串需要纠正时,必须在 bulk 加载前创建显式映射。若所有字段都可保持字符串且用户未指定类型,首次 bulk 导入的动态映射可能够用,但 CSV 除非用户明确接受全字符串类型,否则优先显式映射。
- 需要时创建索引:当第 4 步要求显式类型(或索引不存在)时,在 bulk 加载前调用 `PUT /{index}`(CLI:`elastic es indices create --index '<index>' --mappings '<json>'`)并带 `mappings` 块。不要依赖动态映射从 CSV 字符串单元格推断 `long`、`date` 或 `boolean`。
- 把文件转换为 bulk NDJSON:写一个临时 NDJSON 文件,每个文档占两行——第 1 行是 action 元数据,如 `{"index":{"_index":"<index>"}}`(仅当用户需要稳定 ID 时才加 `"_id"`);第 2 行是类型正确的文档 JSON(数字为 JSON 数字,布尔为 `true`/`false`,日期为 ISO-8601 字符串如 `2023-01-15`)。CSV 需把表头映射为 JSON 字段名并把单元格值转换为与第 5 步映射匹配的 JSON 类型;JSON 数组需遍历每个元素并输出 action 行 + 对象行的配对。
- 执行 bulk 索引:用第 6 步生成的 NDJSON 文件调用 `POST /_bulk`(CLI:`elastic es bulk --index '<index>' --input-file '<ndjson-path>'`)。检查响应:若 `errors` 为 `true`,读取每个条目的 `error` 对象,修复映射或文档问题,并在补救后重试失败条目。不要仅凭退出码为零就假定成功。
- 验证结果:始终确认加载结果,绝不只凭文件检查报告数量。调用 `GET /{index}/_count`(CLI:`elastic es count --index '<index>'`)并与第 2 步的预期行/元素数比较;当类型化列重要时,调用 `GET /{index}/_mapping` 确认 `age` 等字段为数值(`long`/`integer`)、日期为 `date`、布尔为 `boolean`,而非 `text`。报告已验证的文档数,并在相关时报告确认的字段类型。
- 仅用 bulk:所有文件加载都通过带 NDJSON action 行的 `POST /_bulk` 完成,不要对批量文件用单文档 `PUT` 循环,不要用 ingest pipeline 替代客户端 CSV 解析,也不要直接提交未处理的源文件。
- JSON 数组必须拆分:把四元素数组作为一个文档 bulk 加载会得到计数 `1`,正确加载应得到计数 `4`。
- CSV 表头即 schema:CSV 首行命名字段,其余每行是一个文档;一个表头加五行数据行的文件在导入后必须报告计数 `5`。
- 类型转换在文档 JSON 中完成:CSV 单元格以字符串到达;当映射声明 `long`、`date` 或 `boolean` 时,在 bulk 正文中输出 JSON 数字、ISO 日期字符串和布尔字面量,不要依赖 Elasticsearch 在动态映射选择 `text` 后从带引号的 CSV 字符串推断类型。
- 类型化 CSV 优先显式映射:先用 `PUT /{index}` 创建索引可防止静默的全文本索引,避免破坏范围查询和聚合。
- 幂等重载:重载到已有索引时,删除数据前先询问用户;除非指定 `_id`,重复的 bulk `index` 动作会追加新文档。
适用边界 · 注意事项
- 持续或流式摄取场景——应使用 Elastic Agent 或 Beats 来跟踪日志和指标。
- 复杂富化管道场景——应单独设计服务端 ingest pipeline;本技能仍只在客户端把文件转换为 bulk NDJSON 后再加载。
- 索引到索引的复制或映射迁移——应在索引间 reindex,而不是导出为文件。
- 超大二进制列式文件——应先离线转换为 CSV 或 JSON,再按本技能操作。