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

新增字段设置默认值

场景

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

技术实现

一.更新索引映射

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

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

二.设置默认值

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

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

bash 复制代码
PUT _ingest/pipeline/set_defaults
{
  "processors": [
    {
      "set": { 
        "field": "like", 
        "value": 0 
      }
    },
    {
      "set": { 
        "field": "disagree", 
        "value": 0 
      }
    }
  ]
}

PUT /文档名/_settings
{
  "index.default_pipeline": "set_defaults"
}

动态判断

bash 复制代码
"script": {
  "source": """
    if (!ctx.containsKey('like')) { ctx.like = 0 }
    if (!ctx.containsKey('disagree')) { ctx.disagree = 0 }
  """
}

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

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

bash 复制代码
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(亿级)
相关推荐
Elastic 中国社区官方博客13 小时前
用 Elasticsearch 构建一个 ChatGPT connector 来查询 GitHub issues
大数据·人工智能·elasticsearch·搜索引擎·chatgpt·github·全文检索
武子康14 小时前
大数据-172 Elasticsearch 索引操作与 IK 分词器落地实战:7.3/8.15 全流程速查
大数据·后端·elasticsearch
Elasticsearch14 小时前
Elastic 与 Accenture 在 GenAI 数据准备方面的合作
elasticsearch
Elastic 中国社区官方博客15 小时前
Elasticsearch:在隔离环境中安装 ELSER 模型
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
Dxy123931021616 小时前
Elasticsearch删除数据介绍
大数据·elasticsearch·搜索引擎
泻水置平地16 小时前
Docker下安装ES和kibana详细教程
elasticsearch·docker·容器
Wang's Blog16 小时前
Elastic Stack梳理:深度解析Elasticsearch分布式查询机制与相关性算分优化实践
分布式·elasticsearch
yumgpkpm17 小时前
腾讯TBDS和CMP(Cloud Data AI Platform,类Cloudera CDP,如华为鲲鹏 ARM 版)比较的缺陷在哪里?
hive·hadoop·elasticsearch·zookeeper·oracle·kafka·hbase
Elasticsearch18 小时前
Elasticsearch:专用向量数据库很快就会被遗忘,事实上它从未流行过
elasticsearch
Elasticsearch18 小时前
ES|QL 在 9.2:智能查找连接和时间序列支持
elasticsearch