Elasticsearch新增和删除索引中的字段

在ES中,增加字段相对比较容易,因为ES支持动态映射(Dynamic Mapping)。

当索引中新增文档时,ES可以根据文档中的字段自动创建对应的映射关系。如果新字段类型与已有字段类型不同,ES会自动将已有字段类型转换为新类型。

而删除字段则比较困难,因为ES的索引是基于倒排索引的。

当一个字段被索引后,它就会被写入到倒排索引中。

如果删除该字段,就需要删除所有文档中该字段对应的倒排索引,这个过程非常耗时和复杂。

另外,如果删除了一个字段,可能会影响已有的查询和聚合操作,因为这些操作可能依赖于该字段。

因此,在ES中删除字段不是一个常见的操作,通常需要通过创建新的索引来实现。

可以通过创建新的索引并将数据导入新索引的方式来实现增删字段的需求。

虽然这种方式需要重新建立索引,但可以保证数据的完整性和一致性。

简单说,ES实现字段删除的步骤,就是把原索引中除要删除的索引字段外的所有属性,复制到一个新索引上,然后删除就索引,再重建旧索引(没有要删除的字段),然后再把新索引的所有属性,复制到新建的旧索引上。

1、新建索引my_temp_index

2、索引my_temp_index插入一条数据

3、索引my_temp_index查询数据

4、假设要删除的字段是picture_url,先把这个字段的内容删除

注意:

只是删除数据,不是删除字段

如果不删除字段数据,后面reindex时依然会把待删除字段的值带到新索引,即使设置新索引的dynamic为false

4、新建索引my_temp_index_new,不包含picture_url字段

5、同步数据,将my_temp_index旧索引的数据,同步到新索引my_temp_index_new中。注意,这个同步操作前,一定要确保旧索引my_temp_index的picture_url属性是没有值的。否则,这个同步过程,会把picture_url字段带到新索引上

6、验证效果,查询新索引my_temp_index_new映射关系与新索引数据

7、删除原索引

8、新建一个名为原索引名的索引my_temp_index,reindex同步数据,然后删除步骤4新建的索引my_temp_index_new

以上步骤,涉及到的命令如下:

复制代码
get /my_temp_index/_mapping

get /my_temp_index_new/_mapping


DELETE /my_temp_index
DELETE /my_temp_index_new

PUT /my_temp_index
{
	"settings": {
		"number_of_shards": 5,
		"number_of_replicas": 1
	},
	"mappings": {
		"_doc": {
			"properties": {
				"commodity_id": {
					"type": "long"
				},
				"commodity_name": {
					"type": "text"
				},
				"picture_url": {
					"type": "keyword"
				},
				"price": {
					"type": "double"
				}
			}
		}
	}
}

PUT /my_temp_index_new
{
	"settings": {
		"number_of_shards": 5,
		"number_of_replicas": 1
	},
	"mappings": {
		"_doc": {
			"properties": {
				"commodity_id": {
					"type": "long"
				},
				"commodity_name": {
					"type": "text"
				},
				"price": {
					"type": "double"
				}
			}
		}
	}
}

POST /_reindex
{
    "source": {
        "index": "my_temp_index"
    },
    "dest": {
        "index": "my_temp_index_new"
    }
}

GET my_temp_index/_search
{
  "query": {
    "match_all": {}
  }
}

GET my_temp_index_new/_search
{
  "query": {
    "match_all": {}
  }
}


get my_temp_index/_mapping

post /my_temp_index/_doc
{
  "commodity_id":1,
  "commodity_name":"xxx1",
  "picture_url":"actress",
  "price": 999.00
}


POST  /my_temp_index/_update_by_query
{
    "script": {
        "lang": "painless",
        "inline": "ctx._source.remove(\"picture_url\")"
    },
    "query": {
        "match_all": {}
    }
}

参考【es】Elasticsearch新增和删除索引中的字段 - 简书

相关推荐
zhengyquan21 分钟前
7000mAh 电池 + 独立 AI 键,小米 18 Pro 是堆料还是突破?
大数据·人工智能
geneculture31 分钟前
意识的多学科定义:从16个视域,到融智学统合——基于“意+识”框架且区分“意识≠心智”系统研究
大数据·人工智能·融智学的重要应用·哲学与科学统一性·融智时代(杂志)·意识=意+识·智=信息处理+选择用意
Ai173163915791 小时前
GB200 NVL72超节点深度解析:架构、生态与产业格局
大数据·服务器·人工智能·神经网络·机器学习·计算机视觉·架构
观远数据1 小时前
跨部门BI推广权限治理指南:如何避免数据泄露与权责混乱
大数据·人工智能·数据分析
xierui1231231 小时前
探索型 AI 与交付型 AI:两种截然不同的技术物种
大数据·人工智能·效率工具·ai工具·大模型应用·aiagent·agent架构
观远数据2 小时前
跨部门指标统一治理:如何消除数据口径歧义提升决策效率
大数据·人工智能·数据挖掘·数据分析
常宇杏起2 小时前
AI安全进阶:AI模型鲁棒性测试的核心方法
大数据·人工智能·安全
Gofarlic_OMS3 小时前
应对MathWorks合规审查的专项准备工作
大数据·服务器·网络·数据库·人工智能
Logintern093 小时前
【大语言模型应用】利用 DuckDuckGo 和 Tavily 搜索引擎
人工智能·搜索引擎·语言模型
Sharewinfo_BJ3 小时前
香港Databricks AI DAYS参会笔记:Agentic Analytics离我们还有多远
大数据·人工智能·数据分析·powerbi