ES修改mapping中的字段名称

简介: ES修改mapping中的字段名称

前言


我们都知道,在ES中一旦声明了字段名称,就不能对字段名称进行修改了。只能新增字段,不能删除、修改已经声明的mapping字段。

那么,如果我们需要修改mapping中的字段名称,需要怎么操作呢?


一、分析


不能直接修改原索引中的mapping字段,那么只能在新索引中重命名索引字段,然后将数据导入到新索引。

而ES中重建索引命令_reindex正好能很好的支持这一点。


官网说明:docs-reindex-change-name


二、实战


1、创建索引test并插入数据

POST test/_doc/1?refresh
{
  "text": "words words",
  "flag": "foo"
}

2、通过reindex重命名字段名称

说明:

将原索引test中的字段flag重命名为tag

POST _reindex
{
  "source": {
    "index": "test"
  },
  "dest": {
    "index": "test2"
  },
  "script": {
    "source": "ctx._source.tag = ctx._source.remove(\"flag\")"
  }
}


3、查看结果

##根据id查看记录
GET test2/_doc/1
## 返回结果
{
  "found": true,
  "_id": "1",
  "_index": "test2",
  "_type": "_doc",
  "_version": 1,
  "_seq_no": 44,
  "_primary_term": 1,
  "_source": {
    "text": "words words",
    "tag": "foo"
  }
}


总结


本文主要介绍如何通过索引重建reindex+script脚本实现修改索引字段名称。

目录
相关文章
|
6月前
|
SQL 关系型数据库 MySQL
mysql使用default给列设置默认值的问题
mysql使用default给列设置默认值的问题
136 0
|
Java 数据库连接 数据库
Hibernate 中出现表名(XXX) is not mapped 问题
Hibernate 中出现表名(XXX) is not mapped 问题,检查以下3个原因
665 0
Hibernate 中出现表名(XXX) is not mapped 问题
|
SQL 关系型数据库 MySQL
列的完整性约束——设置表字段的默认值(DEFAULT)
列的完整性约束——设置表字段的默认值(DEFAULT)
|
存储 搜索推荐 关系型数据库
|
负载均衡 网络协议 应用服务中间件
ES中索引别名(alias)的到底有什么用
ES中索引别名(alias)的到底有什么用
ES中索引别名(alias)的到底有什么用
|
Java 开发者
OR-Mapping 设计改进(主键配置) | 学习笔记
简介:快速学习 OR-Mapping 设计改进(主键配置)
|
关系型数据库 MySQL 数据库
MySQL约束-默认约束(default)、零填充约束(zerofill)
MySQL约束-默认约束(default)、零填充约束(zerofill)
330 0
MySQL约束-默认约束(default)、零填充约束(zerofill)
|
Java 数据库连接 mybatis
MyBatis - Could not resolve type alias ‘XXX‘(实体类全局别名)
MyBatis - Could not resolve type alias ‘XXX‘(实体类全局别名)
263 0
|
存储 JSON 数据格式
ES7学习笔记(四)字段类型(mapping)
在上一节中,我们创建了索引,在创建索引的时候,我们指定了mapping属性,mapping属性中规定索引中有哪些字段,字段的类型是什么。在mapping中,我们可以定义如下内容: 类型为String的字段,将会被全文索引; 其他的字段类型包括:数字、日期和geo(地理坐标); 日期类型的格式; 动态添加字段的映射规则; 字段的可用类型如下: 简单的类型,比如:text,keyword,date,long,double,boolean,ip。
3183 0