elasticsearch索引如何删除字段

发布时间 2023-04-14 16:09:09作者: 编程笔记
有两种方法可以删除 Elasticsearch 索引中的字段。
1. 通过 mapping 更新
您可以使用 Mapping API 更新索引映射并删除字段。以下是删除字段的步骤:
1. 通过 GET /your-index/_mapping 获取当前的索引映射。
2. 编辑映射,删除要删除的字段。
3. 将更新的映射传回 Elasticsearch,使用以下请求 PUT /your-index/_mapping例如,如果您要从名为 my-index 的索引中删除 age 字段,可以执行以下操作:* 获取当前映射:
GET /my-index/_mapping
* 编辑映射并删除 age 字段:
{
  "properties": {
    "name": {
      "type": "text"
    },
    "gender": {
      "type": "keyword"
    }
  }
}
* 更新映射:
PUT /my-index/_mapping
{
  "properties": {
    "name": {
      "type": "text"
    },
    "gender": {
      "type": "keyword"
    }
  }
}
二 通过 Reindex
您还可以使用 Reindex API 复制索引并排除要删除的字段。以下是删除字段的步骤:1. 创建一个新索引,使用与当前索引相同的设置和映射。
2. 使用 Reindex API 将当前索引中的所有文档复制到新索引中,排除要删除的字段。
3. 删除原始索引并将新索引重命名为原始索引的名称。例如,如果您要从名为 my-index 的索引中删除 age 字段,可以执行以下操作:* 创建新索引:
PUT /my-new-index
{
  "settings": {
    ...
  },
  "mappings": {
    ...
  }
}
* 使用 Reindex API 将数据从旧索引复制到新索引,排除 age 字段:
POST /_reindex
{
  "source": {
    "index": "my-index"
  },
  "dest": {
    "index": "my-new-index"
  },
  "script": {
    "source": "ctx._source.remove('age')"
  }
}
* 删除原始索引:
DELETE /my-index
* 将新索引重命名为原始索引的名称:
POST /_reindex
{
  "source": {
    "index": "my-new-index"
  },
  "dest": {
    "index": "my-index"
  },
  "conflicts": "proceed"
}
DELETE /my-new-index