在 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

相关推荐
随缘而动,随遇而安2 小时前
第八十八篇 大数据中的递归算法:从俄罗斯套娃到分布式计算的奇妙之旅
大数据·数据结构·算法
晋阳十二夜2 小时前
【压力测试之_Jmeter链接Oracle数据库链接】
数据库·oracle·压力测试
GISer_Jing3 小时前
Git协作开发:feature分支、拉取最新并合并
大数据·git·elasticsearch
GDAL4 小时前
Node.js v22.5+ 官方 SQLite 模块全解析:从入门到实战
数据库·sqlite·node.js
IT_10244 小时前
Spring Boot项目开发实战销售管理系统——系统设计!
大数据·spring boot·后端
DCTANT5 小时前
【原创】国产化适配-全量迁移MySQL数据到OpenGauss数据库
java·数据库·spring boot·mysql·opengauss
一只鹿鹿鹿6 小时前
信息化项目验收,软件工程评审和检查表单
大数据·人工智能·后端·智慧城市·软件工程
聚铭网络6 小时前
案例精选 | 某省级税务局AI大数据日志审计中台应用实践
大数据·人工智能·web安全
AI、少年郎7 小时前
Oracle 进阶语法实战:从多维分析到数据清洗的深度应用(第四课)
数据库·oracle
赤橙红的黄7 小时前
自定义线程池-实现任务0丢失的处理策略
数据库·spring