zoukankan      html  css  js  c++  java
  • elasticsearch重建索引

    1、重建索引

    一个field的设置是不能被修改的,如果要修改一个Field,那么应该重新按照新的mapping,建立一个index,然后将数据批量查询出来,重新用bulk api写入index

    批量查询的时候,建议采用scroll api,并且采用多线程并发的方式来reindex数据,每次scoll就查询指定日期的一段数据,交给一个线程即可

    1.1如果说旧索引的名字,是old_index,新索引的名字是new_index,终端java应用,已经在使用old_index在操作了,难道还要去停止java应用,修改使用的indexnew_index,才重新启动java应用吗?这个过程中,就会导致java应用停机,可用性降低

    java应用一个别名,这个别名是指向旧索引的,java应用先用着,java应用先用goods_index alias来操作,此时实际指向的是旧的my_index

    PUT /my_index/_alias/goods_index

    1.2新建一个index,调整其字段的类型

    1.3使用scroll api将数据批量查询出来

    GET /my_index/_search?scroll=1m

    {

        "query": {

            "match_all": {}

        },

        "sort": ["_doc"],

        "size":  1

    }

    1.4采用bulk apiscoll查出来的一批数据,批量写入新索引

    POST /_bulk

    { "index":  { "_index": "my_index_new", "_type": "my_type", "_id": "2" }}

    { "title":    "2017-01-02" }

    反复循环,查询一批又一批的数据出来,采取bulk api将每一批数据批量写入新索引

    1.5goods_index alias切换到my_index_new上去,java应用会直接通过index别名使用新的索引中的数据,java应用程序不需要停机,零提交,高可用

    POST /_aliases

    {

        "actions": [

            { "remove": { "index": "my_index", "alias": "goods_index" }},

            { "add":    { "index": "my_index_new", "alias": "goods_index" }}

        ]

    }

    12)直接通过goods_index别名来查询,是否ok

    GET /goods_index/my_type/_search

    2、基于aliasclient透明切换index

  • 相关阅读:
    怎样装两个MySQL服务器
    MySQL 8.0.12的安装与卸载
    位运算符2
    位运算符
    赋值运算符
    love心形
    变量之间运算
    变量
    标识符
    算术运算符
  • 原文地址:https://www.cnblogs.com/kesimin/p/9559975.html
Copyright © 2011-2022 走看看