本文介绍Elasticsearch零宕机时间更新索引配置映射内容的方法,包括字段类型、分词器、分片数等。方法原理就是,利用别名机制,给索引配置别名,所有应用程序都通过别名访问索引。重建索引,通过索引原名将原索引导入新建索引。再为新索引配置相同的别名。确认成功导入后,则删掉老索引。实现配置参数更新。

注意:

以下所有操作都是基于一个前提:在建原始索引的时候,给原始索引创建了别名

  PUT /my_index_v1         //创建索引 my_index_v1
  PUT /my_index_v1/_alias/my_index       //设置 my_index为 my_index_v1

1. 原始的索引bank,类型:account,mapping如下
{
    "settings": {
        "number_of_shards": 5
    },
    "mappings": {
        "account": {
            "properties": {
                "balance": {
                    "type": "long"
                },
                "account_number": {
                    "type": "long"
                },
                "email": {
                    "type": "string"
                },
                "address": {
                    "type": "string"
                },
                "age": {
                    "type": "long"
                },
                "state": {
                    "type": "string"
                },
                "employer": {
                    "type": "string"
                },
                "lastname": {
                    "type": "string"
                },
                "gender": {
                    "type": "string"
                },
                "firstname": {
                    "type": "string"
                },
                "city": {
                    "type": "string"
                }
            }
        }
    }
}
2.新建一个空的索引bak_bak,类型:account,,分片20,balance,account_number,age字段由long改成了string类型,具有最新的、正确的配置
{
    "settings": {
        "number_of_shards": 20
    },
    "mappings": {
        "account": {
            "properties": {
                "balance": {
                    "type": "string"
                },
                "account_number": {
                    "type": "string"
                },
                "email": {
                    "type": "string"
                },
                "address": {
                    "type": "string"
                },
                "age": {
                    "type": "string"
                },
                "state": {
                    "type": "string"
                },
                "employer": {
                    "type": "string"
                },
                "lastname": {
                    "type": "string"
                },
                "gender": {
                    "type": "string"
                },
                "firstname": {
                    "type": "string"
                },
                "city": {
                    "type": "string"
                }
            }
        }
    }
}
3.使用java API迁移索引,主要配置参数如下:
        String searchHost = "192.168.11.51";// 旧索引地址
        int searchPort = 9300;// 旧索引端口
        String searchIndexName = "bank";// 旧索引名字
        String searchType = "account";// 旧索引类型
        String newIndexName = "bak_bank";// 新索引名字
        String newType = "account";// 新索引类型
        
        // 过滤器根据实际情况来定义,可以有选择性的导出数据,不定义filter的话,就是导出全部数据
        String filter = "{ 'query' : {'query_string' : { 'query' : 'text:blup*'} } }"
                .replaceAll("'", "\"");

String basicAuthCredentials = "base64_ifrequried=";
        boolean withVersion = false;
        final int hitsPerPage = 2000;//bulk批量操作的内存页大小,一般1000-2500比较合适
        float waitInSeconds = 0.0f;//索引线程休眠时间
        // increase if you have lots of things to update
        int keepTimeInMinutes = 90;
        
4.接下来修改alias别名的指向(如果你之前没有用alias来改mapping,纳尼就等着哭吧)
curl -XPOST localhost:8305/_aliases -d '
{
    "actions": [
        { "remove": {
            "alias": "mybank",
            "index": "bank"
        }},
        { "add": {
            "alias": "mybank",
            "index": "bak_bank"
        }}
    ]
}
5.确认导入正常时,将老索引删掉
curl -XDELETE localhost:8303/store_v1

Elasticsearch零停机时间更新索引配置或迁移索引的更多相关文章

  1. 学习用Node.js和Elasticsearch构建搜索引擎(7):零停机时间更新索引配置或迁移索引

    上一篇说到如果一个索引的mapping设置过了,想要修改type或analyzer,通常的做法是新建一个索引,重新设置mapping,再把数据同步过来. 那么如何实现零停机时间更新索引配置或迁移索引? ...

  2. Elasticsearch 学习总结 - 相关配置补充说明

    一.   Elasticsearch的基本概念 term索引词,在elasticsearch中索引词(term)是一个能够被索引的精确值.foo,Foo Foo几个单词是不相同的索引词.索引词(ter ...

  3. Elasticsearch 7.x 之文档、索引和 REST API 【基础入门篇】

    前几天写过一篇<Elasticsearch 7.x 最详细安装及配置>,今天继续最新版基础入门内容.这一篇简单总结了 Elasticsearch 7.x 之文档.索引和 REST API. ...

  4. ElasticSearch第一步-环境配置

    ElasticSearch第一步-环境配置 ElasticSearch第二步-CRUD之Sense ElasticSearch第三步-中文分词 ElasticSearch第四步-查询详解 Elasti ...

  5. Elasticsearch 通关教程(二): 索引映射Mapping问题

    数据库建表的时候,我们的DDL语句一般都会指定每个字段的存储类型,例如:varchar,int,datetime等等,目的很明确,就是更精确的存储数据,防止数据类型格式混乱. CREATE TABLE ...

  6. Elasticsearch安装与环境配置

    Elasticsearch安装与环境配置 确保机器上已经安装了jdk7以上版本 下载:官网下载地址:https://www.elastic.co/downloads/elasticsearch 将下载 ...

  7. Elasticsearch 6 重要参数配置

    采用zip或tar.gz的二进制包方式安装的ES,需要配置一系列参数,其中重要参数配置如下: 一. ElasticSearch参数配置 1. data和logs路径配置 如果使用.zip或.tar.g ...

  8. Elasticsearch:运用shard filtering来控制索引分配给哪个节点

    在我们的实际部署中,我们的各个node(节点)的能力是不一样的.比如有的节点的计算能力比较强,而且配有高性能的存储,速度也比较快,同时我们可能有一些node的能力稍微差一点,比如计算能力及存储器的速度 ...

  9. ELK(ElasticSearch+Logstash+Kibana)配置中的一些坑基于7.6版本

    三个组件都是采用Docker镜像安装,过程简单不做赘述,直接使用Docker官方镜像运行容器即可,注意三个组件版本必须一致. 运行容器时最好将三个组件的核心配置文件与主机做映射,方便直接在主机修改不用 ...

随机推荐

  1. 使用SUID二进制文件进行Linux权限升级技巧

      0x00 基础知识 众所周知,在Linux中一切都以文件存在,包括具有允许或限制三个执行操作(即读/写/执行)权限的目录和设备.因此,当给任何文件设置权限时,应该需要了解允许的Linux用户或限制 ...

  2. 单点登录(五)-----遇到问题-----cas server 源码部署tomcat运行报错BeanCreationException:Error creating bean with name 's

    我们在上一篇文章已经解决了把下载好的cas server源码部署到tomcat缺少子项目编辑文件或者jar包导致找不到class报错的问题 单点登录(四)-----遇到问题-----cas serve ...

  3. 解题:APIO/CTSC 2007 数据备份

    题面 用双向链表把相邻两项的差串起来,用大根堆维护价值,每次贪心取最大的$x$.取完之后打标记删掉$pre[x]$和$nxt[x]$,之后用$val[pre[x]]+val[nxt[x]]-val[x ...

  4. hihocoder #1162 矩阵加速dp

    #1162 : 骨牌覆盖问题·三 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 前两周里,我们讲解了2xN,3xN骨牌覆盖的问题,并且引入了两种不同的递推方法.这一次我 ...

  5. Java基础之疑难知识点

    问题列表: 1. Java中子类中可以有与父类相同的属性名吗? 2. Java中子类继承了父类的私有属性及方法吗? 3. Java中抽象类到底能不能被实例化? 1. Java中子类中可以有与父类相同的 ...

  6. UDP_TCP示意图

  7. vue学习记录

    vue中常用的指令 v-model 双向数据绑定,一般用于表单元素 v-for 对数组或对象进行循环操作,使用的是v-for <!-- 普通循环 --><li v-for=" ...

  8. 2017 清北济南考前刷题Day 5 afternoon

    期望得分:100+100+30=230 实际得分:0+0+0=30 T1 直接模拟 #include<cstdio> #include<iostream> using name ...

  9. urllib2模块初体验———豆瓣读书页面下载小爬虫

    我也是根据:http://blog.csdn.net/pleasecallmewhy/article/details/8927832 ,来写出豆瓣读书的爬虫,废话不说直接上代码: #!/usr/bin ...

  10. Arcgis10.1 Arcobject连接Oracel数据库

    原来使用Arcgis9.3的版本,现在升级到了10.1遇到不少问题,原来初始化工作空间的代码无法正常运行了,修改后的代码如下: static void Test() { IPropertySet sd ...