今天因为上线之前,忘记提单先把es的索引新增的几个字段先建好,导致需求上线后,一些触发推送到es的数据,使得es自动根据数据类型创建索引字段类型,原本我打算增加的mapping字段是数组keyword类型的,但是es自动匹配创建类型为long,导致索引作废,可是这个es索引24小时都有人在使用,如果粗暴删除重建索引,再全量同步数据,会导致一段时间国内外用户查询数据受影响,那有什么解决方法吗?

1、先新建一个正确的索引,如下图(原索引feh-product-sit)

2、将旧索引数据同步到新的索引上

POST _reindex
{"source": {"index": "feh-product-sit"},"dest": {"index": "feh-product-sit-v1","op_type": "create"}
}

此时,数据是批量同步的,可以通过以下命令查看同步情况

GET _tasks?detailed=true&actions=*reindex&human

当同步完成时,如下图

3、将旧索引删除

4、删除完成之后马上执行以下命令,给旧索引新增别名
此时新索引就代替了旧索引的位置,这个过程要快,因为保不准此刻正在推数据,你就漏了几条生产数据了(事实上我们当时也是漏推了几条数据)

POST /_aliases
{"actions": [{"add": {"index": "feh-product-sit-v1","alias": "feh-product-sit"}}]
}

重点:

建议的解决方案,在生产中,我们不要直接使用索引的正式索引名
我们建索引feh-product-sit-v1并给他配置一个别名feh-product-sit-alias(或者直接feh-product-sit),在代码配置文件中就使用 feh-product-sit-alias,去操作es,如果遇到这种情况,我们就直接新建一个索引feh-product-sit-v2,然后按照上面的方式重推数据后,将索引feh-product-sit-v1去除别名 feh-product-sit-alias的同时将feh-product-sit-v2别名为 feh-product-sit-alias,使用如下指令

POST /_aliases
{"actions": [{"add": {"index": "index-new","alias": "index-alias"}},{"remove": {"index": "index-old","alias": "index-alias"}}]
}

这样有个好处,如上是一条命令进行的原子性操作,可以减少在删除旧索引和切换新索引操作时带来的影响,使用之前方法的话如果在此期间有用户发起查询请求那么就会报错

es如何修改es索引字段类型 reindex相关推荐

  1. 修改mysql 视图字段类型_记一次mysql视图创建时自定义字段类型不同环境不同的原因...

    由于老项目使用的是hibernate,当项目启动时会去检查数据库字段类型等,发现一张视图中某个自定义字段在开发环境中类型为text,但是到了生产环境类型却为mediumtext,导致代码在生产上会有问 ...

  2. (SQL)修改表结构[字段类型]、表字段长度,

    ①:更改字段类型长度 ALTER TABLE 表名 ALTER COLUMN 字段名 类型的长度–varchar(50) 例:把城市表的城市字段原来长度为20改为30 ALTER TABLE city ...

  3. mysql中修改表字段的类型长度_(SQL)修改表结构[字段类型]、表字段长度,

    ①:更改字段类型长度 ALTER TABLE 表名 ALTER COLUMN 字段名 类型的长度–varchar(50) 例:把城市表的城市字段原来长度为20改为30 ALTER TABLE city ...

  4. 修改mysql 视图字段类型_MySQL中的数据类型,列选项,视图

    列的数据类型 整型 类型 取值范围 tinyint -128 - 127 smallint -32768 - 32767(几万) mediumint -8388608 - 8388607(几百万) i ...

  5. sql修改表的字段类型

    格式 alter table [表名] change [想修改的字段] [新字段名] [类型+长度]; alter table tb_goods_visit change id id int;

  6. 用MS SQL 语句修改表中字段类型

    [问题]用SQL 语句判断表中是否存在password字段,不存在则新增字段,若存在password字段,把字段的类型由int 类型改为text类型. [实现方法] if exists( select ...

  7. mysql修改字段类型语句

    mysql中字段为TEXT类型的内容怎么修改? 可以把字段类型改成MEDIUMTEXT(最多存放16777215个字符)或者LONGTEXT(最多存放4294967295个字符). MySQLsupp ...

  8. Oracle表中已有数据修改字段类型

    Oracle的表中已存在了数据,这时再来修改表的字段类型就无法修改.例如, number类型改成number(22),这时数据库会报ORA-01440: column to be modified m ...

  9. Navicat设置字段类型

    Navicat设置字段类型 Navicat这个工具,使用非常方便. 我们经常遇到修改数据库的字段类型,很多时候会报错,如下 意思是:数据表里面的数据太长,设置的字段类型不合理. 大多的错误,是由于该数 ...

最新文章

  1. gradle 项目运行主类报错
  2. XML知识点概念小摘
  3. ComblockEngine 引擎实践
  4. nginx限流健康检查
  5. [react] react的状态提升是什么?使用场景有哪些
  6. 趣挨踢 | 用大数据扒一扒蔡徐坤的真假流量粉
  7. 线程池框架-Executor
  8. python应用:爬虫框架Scrapy系统学习第三篇——初识scrapy
  9. struts中action与页面之间的传值方式
  10. 【附】Python安装
  11. 基于PHP+MySQL的个人网页设计与实现
  12. 点与点集:边界点与聚点的关系【高等数学】
  13. 佳能Canon PIXMA TS208 打印机驱动
  14. 云终端计算机进入bios,【惠普进bios按什么键】惠普进bios调u盘启动_惠普进入bios-系统城...
  15. 【一句日历】2019年9月
  16. C和C++的二进制,八进制,十六进制输出格式(全面版)
  17. 龙芯平台OsTools-Gmac更新
  18. ibm服务器usb虚拟网卡,山石虚拟防火墙安装步骤
  19. 2022-09-06 Android输入法顶起输入框,遮挡RecyclerView
  20. EPLAN的USB加密狗驱动程序将于2023年5月23日停止维护更新?

热门文章

  1. put url带参数_问题回答:Http 请求的Post 和Put 的区别
  2. 字节跳动后端实习面经,一面+二面+三面(已收到offer)
  3. Aircrack-ng之Airmon-ng命令
  4. 常用数据清洗方法大盘点
  5. 【Python】用sympy判断函数的单调性和极值
  6. 前端实习——微信小程序(2)
  7. Java使用华软通信能力平台实现短信发送
  8. 美团技术团队:实例详解机器学习如何解决问题
  9. 华东师大计算机系博士几年,2018华东师范大学就业结果公布!就业率超97%,博士生月薪1.1万!...
  10. pcl::IOException what() [pcl::PCDWriter::writeASCII] Could not open file for writing