在 Elasticsearch 中删除文档中的某个字段

作者:来自 Elastic Kofi Bartlett

探索在 Elasticsearch 中删除文档字段的方法。

更多有关 Elasticsearch 文档的操作,请详细阅读文章 "开始使用 Elasticsearch (1)"。

想获得 Elastic 认证?查看下一期 Elasticsearch Engineer 培训的时间!

Elasticsearch 拥有大量新功能,帮助你为你的使用场景构建最佳搜索解决方案。查看我们的示例 notebooks 了解更多内容,开始免费的云端试用,或现在就在本地机器上体验 Elastic。


在 Elasticsearch 中,从文档中删除字段是一个常见需求。当你想从索引中移除不必要或过时的信息时,这会很有用。本文将讨论在 Elasticsearch 中删除文档字段的不同方法,并附带示例和逐步说明。

方法一:使用 Update API

Update API 允许你通过提供脚本来更新文档的内容。你可以使用该 API 将字段设置为 null,或者更好地,直接从文档中删除该字段。以下是执行此操作的分步指南:

  1. 确定你要更新的文档的索引、文档类型(如果使用的是 Elasticsearch 6.x 或更早版本)和文档 ID。

  2. 使用 Update API,并提供一个脚本,该脚本将字段设置为 null,或直接从文档中移除该字段。以下示例演示了如何从索引为 my_index,ID 为 1 的文档中删除名为 field_to_delete 的字段:

    复制代码
    POST /my_index/_update/1
    {
      "script": {
        "source": "ctx._source.remove('field_to_delete')",
        "lang": "painless"
      }
    }
  3. 执行请求。如果成功,Elasticsearch 会返回一个响应,表示文档已被更新。

注意:此方法只会从指定文档中移除字段。该字段仍然会存在于映射和索引中的其他文档中。

方法二:使用修改后的源数据进行重新索引

如果你想从索引中的所有文档中删除一个字段,可以使用 Reindex API 创建一个带有修改后源数据的新索引。操作如下:

  1. 创建一个与原始索引具有相同设置和映射的新索引。你可以使用 Get Index API 获取原始索引的设置和映射。

  2. 使用 Reindex API 将文档从原始索引复制到新索引,同时从源中移除该字段。以下示例演示了如何从 "my_index" 索引中的所有文档中删除 "field_to_delete" 字段:

    复制代码
    POST /_reindex
    {
      "source": {
        "index": "my_index"
      },
      "dest": {
        "index": "new_index"
      },
      "script": {
        "source": "ctx._source.remove('field_to_delete')"
      }
    }
  3. 验证新索引中是否包含已删除该字段的正确文档

如果一切正常,你可以删除原始索引,并在需要时为新索引添加一个别名,使其名称与原始索引相同。

方法三:更新映射并重新索引

如果你想从映射和索引中的所有文档中删除一个字段,可以更新映射并重新索引文档。操作如下:

  1. 创建一个与原始索引具有相同设置的新索引。

  2. 使用 Get Mapping API 获取原始索引的映射。

  3. 修改映射,移除你想删除的字段。

  4. 使用 Put Mapping API 将修改后的映射应用到新索引。

  5. 使用 Reindex API 将文档从原始索引复制到新索引,方式同方法二。

  6. 验证新索引是否包含已删除该字段的正确文档,且该字段不再出现在映射中。

  7. 如果一切正常,你可以删除原始索引,并在需要时为新索引添加一个别名,使其名称与原始索引相同。

结论

本文讨论了在 Elasticsearch 中删除文档字段的三种方法:使用 Update API、通过修改后的 source 重新索引,以及更新映射后重新索引。每种方法都有其适用场景和权衡,请根据实际需求选择合适的方法。在应用到生产环境之前,请务必测试你的变更并验证结果。

原文:Deleting a field from a document in Elasticsearch - Elasticsearch Labs

相关推荐
Rosanci6 小时前
谷歌浏览器插件开发实战指南:从 Hello World 到上架发布
大数据·人工智能·chrome·程序人生
m0_466525296 小时前
云从科技上线云起ModelHub:AI团队时代的模型算力基础设施
大数据·人工智能·科技
十二同学啊7 小时前
向量数据库:从核心原理到 RAG 与 Java 实战
数据库
蓝速科技8 小时前
会议室门牌公告通知发布选型与落地指南丨蓝速科技
大数据·运维·数据库·人工智能·科技
一 乐10 小时前
二手交易平台|基于springboot + vue二手交易平台(源码+数据库+文档)
java·数据库·vue.js·spring boot·小程序
SelectDB11 小时前
同等资源下 Apache Doris 4.2 vs StarRocks 4.1.1:1TB SSB 与 TPC-H 性能实测
大数据·数据库·数据分析
这个DBA有点耶11 小时前
数据库集群与分布式架构:三条技术路线对比、金仓KES RAC实测数据与决策框架
数据库·程序员·架构
MayBaymax11 小时前
MongoDB 索引与事务
java·数据库·mongodb
SelectDB11 小时前
Doris vs ClickHouse:企业 OLAP 走向下一阶段,两种技术路线如何选择
大数据·数据库·数据分析
vx-程序开发11 小时前
【计算机毕设】django校园跑腿服务系统83141
java·数据库·vue.js·spring boot·spring·elasticsearch·django