本文介绍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. ip netns

    虚拟化网络都是基于netns实现,不管是昨日的openstack,还是今日的docker. ip netns ip-netns - process network namespace manageme ...

  2. MyBatis.3.CRUD

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-/ ...

  3. APK反编译之一:基础知识—APK、Dalvik字节码和smali文件

    refs: APK反编译之一:基础知识http://blog.csdn.net/lpohvbe/article/details/7981386 APK反编译之二:工具介绍http://blog.csd ...

  4. codeforces div1 & div2 参与人员分数统计

    Analysis helps to see the nature of things.

  5. CDOJ--1056

    原题链接:http://acm.uestc.edu.cn/problem.php?pid=1056 题目:大小写切换 分析:以前这种问题我都是用dp写的,最近学到了一种更简洁的方法,特此记录下来! # ...

  6. C陷阱与缺陷的个人知识点摘录

    编译过程的一点心得体会: .h文件其实只在预处理的过程用到,用来将类似#include <stdio.h>这样的行展开为具体内容. 那些标准库或者其他库中的函数,是在链接的过程中连接器把相 ...

  7. 四、java面向对象编程_2

    目录 六.对象的创建和使用 七.this关键字 八.static关键字 九.package和import语句 十.类的继承 十一.访问控制 十二.方法的重写 十三.super关键字 十四.继承中的构造 ...

  8. state.sls与state.highstate区别

    最近编写kubernetes的saltstack状态配置文件,在github上找到一个开源的salt文件,根据自己的需要,完成修改之后.执行部署测试 大致目录结构如下: |----k8s | |___ ...

  9. Kubernetes Deloyment实现滚动更新

    目录 滚动更新简介 使用kubectl rolling-update更新RC Deployment的rolling-update 滚动更新简介 当kubernetes集群中的某个服务需要升级时,传统的 ...

  10. Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream)

    Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在我们学习字 ...