Elasticsearch别名操作api

1.前言

在es里面index aliases就像是软连接一样,它可以映射一个或多个索引,提供了非常灵活的特性,使用它我们可以做到:

(1)在一个运行中的es集群中无缝的切换一个索引到另一个索引上

(2)分组多个索引,比如按月创建的索引,我们可以通过别名构造出一个最近3个月的索引

(3)查询一个索引里面的部分数据构成一个类似数据库的视图(views)

es里面操作索引别名的有两个api命令:

_alias 执行单个别名操作

_aliases 原子的执行多个别名操作

2. 如何使用?

假设我们有两个索引分别是my_index_v1my_index_v2现在想通过索引别名来实现无缝切换,他们对外的索引别名叫my_index

  • 首先我们先创建第一个old index并给你添加aliases

    PUT /my_index_v1   //构建索引
    
    PUT /my_index_v1/_alias/my_index   //给索引添加别名
    
  • 创建完成之后,我们可以查询一下他们的关系

    GET /*/_alias/my_index  //查某个别名映射的所有index
    
    GET /my_index_v1/_alias/* //查询某个index拥有的别名
    

    返回结果如下:

    {
        "my_index_v1" : {
           "aliases" : {
               "my_index" : { }
            }
        }
    }
    
  • 现在我们构建new index

    PUT /my_index_v2   //构建索引
    

    新索引构建完毕之后,我们就可以执行切换操作命令了:

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

上面的操作是顺序的执行的,先移除old index的别名,然后给new index 添加新的别名,这样以来
索引就透明的别切换了,用户不会感觉任何变化,而且也不需要停机操作。

3. java api里面如何操作:

(1)添加别名

  client.admin().indices().prepareAliases().addAlias("my_index_v1","my_index");

(2)移除别名

        client.admin().indices().prepareAliases().removeAlias("my_index_v1","my_index");

(3)删除一个别名后再添加一个

client.admin().indices().prepareAliases().removeAlias("my_index_v1","my_index")
                .addAlias("my_index_v2","my_index").execute().actionGet();

当别名添加完毕后,我们在删除,搜索,更新都可以直接使用:

 SearchRequestBuilder search=client.prepareSearch("my_index");

有一点需要注意使用别名后,type类型的值不需要在填写,如果你填写了es是会抛异常的,因为它认为你这别名是一个新的索引,所以我们只写index name即可,es服务端知道它的类型。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值