赞
踩
有两种方法可以删除 Elasticsearch 索引中的字段。
首先需要关闭索引才能更新,待更新后再打开索引
PUT /my-index/_close
PUT /my-index/_open
您可以使用 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" } } }
除字段则比较困难,因为ES的索引是基于倒排索引的。
当一个字段被索引后,它就会被写入到倒排索引中。
如果删除该字段,就需要删除所有文档中该字段对应的倒排索引,这个过程非常耗时和复杂。
另外,如果删除了一个字段,可能会影响已有的查询和聚合操作,因为这些操作可能依赖于该字段。
因此,在ES中删除字段不是一个常见的操作,通常需要通过创建新的索引来实现。
可以通过创建新的索引并将数据导入新索引的方式来实现增删字段的需求。
虽然这种方式需要重新建立索引,但可以保证数据的完整性和一致性。
您还可以使用 Reindex API 复制索引并排除要删除的字段。以下是删除字段的步骤:1. 创建一个新索引,使用与当前索引相同的设置和映射。
2. 使用 Reindex API 将当前索引中的所有文档复制到新索引中,排除要删除的字段。
3. 删除原始索引并将新索引重命名为原始索引的名称。例如,如果您要从名为 my-index
的索引中删除 age
字段,可以执行以下操作:* 创建新索引:
PUT /my-new-index { "settings": { ... }, { "mappings": { "properties": { "slsj": { "format": "yyyy-MM-dd HH:mm:ss", "store": true, "type": "date" }, "category": { "analyzer": "icu_analyzer", "type": "text" }, "content": { "analyzer": "icu_analyzer", "type": "text" }, "serialno": { "type": "text" } } } } }
* 使用 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。