请求提供ElasticDump transform选项使用示例:跨ES服务器迁移并修改字段
使用 elasticdump 的 transform 选项实现索引迁移并修改字段
前提准备
- 确保已全局安装 elasticdump:
npm install elasticdump -g
基础命令结构
elasticdump 的核心命令格式如下,其中 --transform 参数用于在数据迁移过程中修改文档字段:
elasticdump \ --input=http://源ES服务器IP:9200/源索引名 \ --output=http://目标ES服务器IP:9200/目标索引名 \ --transform="function(doc) { /* 在这里编写字段修改逻辑 */ return doc; }"
常用 transform 示例
1. 修改已有字段的值
比如将文档中的 status 字段值从 active 改为 enabled,同时给 create_time 字段添加前缀:
elasticdump \ --input=http://192.168.1.10:9200/my_source_index \ --output=http://192.168.1.20:9200/my_target_index \ --transform="function(doc) { if (doc._source.status === 'active') { doc._source.status = 'enabled'; } doc._source.create_time = '2024-' + doc._source.create_time; return doc; }"
2. 添加新字段
给所有文档添加一个 migrated_from 字段,标记数据来源:
elasticdump \ --input=http://192.168.1.10:9200/my_source_index \ --output=http://192.168.1.20:9200/my_target_index \ --transform="function(doc) { doc._source.migrated_from = 'old_es_server'; return doc; }"
3. 删除不需要的字段
移除文档中的 sensitive_data 敏感字段:
elasticdump \ --input=http://192.168.1.10:9200/my_source_index \ --output=http://192.168.1.20:9200/my_target_index \ --transform="function(doc) { delete doc._source.sensitive_data; return doc; }"
4. 嵌套字段修改
如果字段是嵌套结构,比如修改 user.info.age 的值(统一加1):
elasticdump \ --input=http://192.168.1.10:9200/my_source_index \ --output=http://192.168.1.20:9200/my_target_index \ --transform="function(doc) { if (doc._source.user && doc._source.user.info) { doc._source.user.info.age = parseInt(doc._source.user.info.age) + 1; } return doc; }"
注意事项
doc对象包含 Elasticsearch 文档的完整结构,实际业务数据存储在doc._source中- 必须确保 transform 函数最后返回修改后的
doc,否则数据无法正确写入目标索引 - 如果修改逻辑复杂,可以将函数写在单独的 JS 文件中,通过
--transform="./my-transform.js"引用(文件中直接导出函数即可)
内容的提问来源于stack exchange,提问作者Srujan Gundeti
相关产品推荐
相关产品推荐

