Elastic Search实战之不停机重建索引(修改映射类型)

本文介绍了如何在Elasticsearch(ES)中不停机重建索引以修改字段映射类型。首先,创建目标索引(如a_v2),保留与原索引相同的映射,除了要修改的字段。然后,使用reindex API将a_v1数据导入a_v2。接着,删除a_v1别名并为a_v2设置别名a,实现线上服务切换。最后,再次执行reindex进行增量同步。该方法适用于已使用索引别名的场景,确保服务不中断。
摘要由CSDN通过智能技术生成
前言

我们在使用ES的时候,尤其是初学者,通常都会遇到一个问题,那就是文档字段的映射类型创建错误问题,但是ES上却不能像mysql一样直接去修改字段类型,这时便出现了这个棘手的问题,今天让我们用一种索引重建的方式来修改字段映射类型,本文使用的ES是5.6.3版本。

前提

使用索引重建并且不停机,需要有个前提,那就是你在使用索引时,都是使用索引别名而不是使用真正的索引名
,如果这点在你的程序上还没有做的话,那么请为其建立别名,好处很多,一旦当前索引出现了什么问题 不能及时恢复,你可以紧急切换到备用索引上而无需再重启服务、方便索引重建等等。

思路

说下我们索引重建的思路,假设我们现有索引名为:a_v1,代表索引a的第一个版本,其别名为索引:a,重建步骤如下:
第一步:创建索引a_v2(该索引的mapping需要与a_v1基本保持一致,除了你要修改的字段mapping)
第二步:把a_v1的数据导入a_v2索引中(ES中有现成的语句支持)
第三步:把a_v1别名删除并且同时为a_v2添加别名a(此时线上程序已经切换到a_v2数据源上了)
第四步:再次执行第二步骤,目的是增量同步a_v1中修改但没有同步到a_v2中的数据(因为你在做第二、三步的时候很可能线上的a_v1索引数据发生修改了)

举例说明

下面我们以商品的索引重建为例,来看下具体的语句要怎么写吧O(∩_∩)O~,假设现在已经有索引goods_v1别名为goods

1. 新建目标索引V2版本
curl -XPUT --header 'Accept: application/json' 'http://es.zhuma.com/goods_v2' -d '{
        "mappings": {
            "default": {
                "dynamic": "false",
                "properties
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值