在 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

相关推荐
NineData6 小时前
NineData 迁移评估功能正式上线
数据库·dba
NineData12 小时前
数据库迁移总踩坑?用 NineData 迁移评估,提前识别所有兼容性风险
数据库·程序员·云计算
洛森唛13 小时前
Elasticsearch DSL 查询语法大全:从入门到精通
后端·elasticsearch
赵渝强老师14 小时前
【赵渝强老师】PostgreSQL中表的碎片
数据库·postgresql
字节跳动数据平台18 小时前
代码量减少 70%、GPU 利用率达 95%:火山引擎多模态数据湖如何释放模思智能的算法生产力
大数据
全栈老石18 小时前
拆解低代码引擎核心:元数据驱动的"万能表"架构
数据库·低代码
得物技术19 小时前
深入剖析Spark UI界面:参数与界面详解|得物技术
大数据·后端·spark
武子康21 小时前
大数据-238 离线数仓 - 广告业务 Hive分析实战:ADS 点击率、购买率与 Top100 排名避坑
大数据·后端·apache hive
倔强的石头_2 天前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
武子康2 天前
大数据-237 离线数仓 - Hive 广告业务实战:ODS→DWD 事件解析、广告明细与转化分析落地
大数据·后端·apache hive