zoukankan      html  css  js  c++  java
  • Elasticsearch索引别名使用

    背景

    项目中使用的老的索引,由于数据冗余,会想影响性能。因此需要重新建立索引,但是这样必然需要更新服务中的索引名称,然后重新启动服务,可能会对服务的使用者产生一定的影响。因此,调研了Elasticsearch的索引别名,来解决这个问题。

    简介

    索引别名就像一个快捷方式或软连接,可以指向一个或多个索引,也可以给任何一个需要索引名的API来使用。别名 带给我们极大的灵活性,我们可以使用索引别名实现以下功能:

    • 在运行的集群中可以无缝的从一个索引切换到另一个索引
    • 给多个索引分组 (例如, last_three_months)
    • 给索引的一个子集创建视图

    索引别名的使用

    目前,有两种管理别名的方式,_alias 用于单个操作, _aliases 用于执行多个原子级操作

    创建别名的步骤如下:
    1、 首先我们创建一个索引my_index_v1

    PUT /my_index_v1
    

    2、然后设置索引别名 my_index 指向 my_index_v1

    PUT /my_index_v1/_alias/my_index
    

    现在,我们可以通过以下命令行检测my_index别名指向了哪一个索引

    GET /*/_alias/my_index
    

    也可以通过下面的命令行查询哪些别名指向了my_index_v1索引

    GET /my_index_v1/_alias/*
    

    现在,加入我们在时使用中发现了一些问题,需要优化my_index_v1索引,比如修改mapping,此时,我们必须重新索引数据,设置mapping。首先,我们还是和上面一样,新建了一个新的索引my_index_v2。

    此时,我们就可以使用索引别名,将别名my_index指向my_index_v2,同时,我们还需要将my_index_v1的别名移除。这个操作需要原子化,这意味这我们需要使用_aliases操作,具体命令如下

    POST /_aliases
    {
        "actions": [
            { "remove": { "index": "my_index_v1", "alias": "my_index" }},
            { "add":    { "index": "my_index_v2", "alias": "my_index" }}
        ]
    }
    

    此时,我们的应用在没有重新启动的情况下,从旧的索引移到了新的索引,对用户来说是完全无感知的,非常友好。

  • 相关阅读:
    希尔排序算法
    java面向对象的栈 队列 优先级队列的比较
    java不用任何已有方法完全自写的去重法
    java面向对象的冒泡排序,选择排序和插入排序的比较
    java面向对象的有序数组和无序数组的比较
    Truncated incorrect DOUBLE value:
    laradock 安装多php版本
    graph-composer, 面向 composer.json的依赖图可视化( PHP + Composer )
    php基础
    php通过curl调用webservice
  • 原文地址:https://www.cnblogs.com/junjiang3/p/11114521.html
Copyright © 2011-2022 走看看