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

es在已有历史数据的文档新增加字段操作

新增字段设置默认值

场景

在已经有大量数据的索引文档上,增加新字段

技术实现

一.更新索引映射

通过PUT请求显式定义新字段类型,确保后续写入的文档能被正确解析

PUT /文档名/_mapping
{"properties": {"字段名1": {"type": ""},"字段名2": {"type": ""}}
}
  • 此操作仅定义字段类型,不会自动填充历史文档的默认值

二.设置默认值

1.写入时自动填充(新文档)

通过 Ingest Pipeline 在文档写入前自动添加默认值, 此操作仅对新写入数据生效

PUT _ingest/pipeline/set_defaults
{"processors": [{"set": { "field": "like", "value": 0 }},{"set": { "field": "disagree", "value": 0 }}]
}PUT /文档名/_settings
{"index.default_pipeline": "set_defaults"
}

动态判断

"script": {"source": """if (!ctx.containsKey('like')) { ctx.like = 0 }if (!ctx.containsKey('disagree')) { ctx.disagree = 0 }"""
}

2.批量回填历史数据(旧文档)

使用 _update_by_query API 批量更新已有文档

POST /service_bot_msg_chat_log/_update_by_query
{"script": {"source": """if (ctx._source.like == null) { ctx._source.like = 0 }if (ctx._source.disagree == null) { ctx._source.disagree = 0 }""","lang": "painless"},"query": {"bool": {"must_not": [{ "exists": { "field": "like" } },{ "exists": { "field": "disagree" } }]}},"timeout": "10m",  // 防止超时"slices": 5        // 并行分片加速处理
}
  • 性能优化
    • 异步执行:添加 ?wait_for_completion=false 转为后台任务

操作建议

  • 新数据优先:优先配置 Ingest Pipeline,确保增量数据自动初始化
  • 历史数据分治:根据数据量选择 _update_by_query(百万级)或 Reindex(亿级)

相关文章:

  • Python編譯出exe如何掛載到工作排程器上
  • VTK|显示三维图像的二维切片
  • Pyro:基于PyTorch的概率编程框架
  • 哈夫曼编码:数据压缩的优雅艺术
  • 使用PHP对接东南亚、日本、印度和印度尼西亚股票数据源
  • 洛谷U536262 井底之“鸡” 附视频讲解
  • WEB安全--SQL注入--Oracle注入
  • 【VMware】虚拟机运行 Linux Ubuntu、MAC 安装和配置
  • oracle序列自增问题
  • 如何在 Windows 11 或 10 上安装 Django
  • Springboot 跨域拦截器配置说明
  • 已知6、7、8月月平均气温和标准差,求夏季季平均温度与标准差
  • 《Opensearch-SQL》论文精读:2025年在BIRD的SOTA方法(Text-to-SQL任务)
  • LightRAG 由入门到精通
  • leetcode刷题日记——对称二叉树
  • 使用腾讯云高性能空间部署YOLOv11训练模型
  • C/C++ 知识点:引用临时对象
  • JavaScript篇:前端模块化进化史:从CommonJS到ES6的奇幻之旅
  • Python Django 的 ORM 编程思想及使用步骤
  • 通过vcpkg交叉编译grpc:构建Arm64平台的Docker化开发环境
  • 讲述“外国货币上的中国故事”,《世界钱币上的中国印记》主题书刊出版发布
  • 再囤三个月库存!美国客户抢付尾款,外贸企业发货订单排到7月
  • 特朗普与泽连斯基通话
  • 电子凭证会计数据标准推广至全国
  • 雷军:小米芯片采用3纳米制程,首款SUV“YU7”即将发布
  • 旅马大熊猫“福娃”“凤仪”平安回国