Elasticsearch Index Aliases详解
index aliases,索引别名,有点类似名称映射,一个索引别名可以映射多个真实索引,索引别名在定义时还支持filter,构成同一个索引,不同的视图。 思考:一个索引别名可以映射成多个索引,那如果向一个别名添加一个文档时,会在该别名下对应的所有索引下都创建一个文档? 1、如何创建索引别名 POST /_aliases { "actions" : [ { "remove" : { "index" : "test1", "alias" : "alias1" } }, { "add" : { "index" : "test2", "alias" : "alias1" } } ] } 索引创建API,支持add、remove操作,当前Restfull java客户端未封装该方法。 为索引创建别名,也可以在创建索引API中指定: PUT test { "aliases" : { "alias_1" : {}, "alias_2" : { "filter" : { "term" : {"user" : "kimchy" } }, "routing" : "kimchy" } } } 2、Filtered Aliases 带有过滤器的别名提供了创建相同索引的不同“视图”的简单方法。过滤器可以使用查询DSL定义,并应用于所有搜索、计数、按查询删除以及类似于此别名的操作。 其使用示例如下,假设存储该索引: PUT /test1 { "mappings": { "_doc": { "properties": { "user" : { "type": "keyword" } } } } } 为别名设置过滤器的使用方法如下: POST /_aliases { "actions" : [ { "add" : { "index" : "China_Provice_Index", "alias" : "shanghai_index", "filter" : { "term" : { "provice" : "shanghai" } } }, "add" : { "index" : "China_Provice_Index", "alias" : "guangzhou_index", "filter" : { "term" : { "provice" : "guangzhou" } } } } ] } 通过为China_Provice_Index(中国各省份人才数据库索引)创建别名,shanghai_index、guangzhou_index,这样从两个别名进行数据查询,只会查出各自省份的数据,是不是有点类似于”多租户“,也即通过索引别名并指定过滤器,能为同一个索引提供不同的视图。 3、Routing 在创建别名时可以指定路由值。 POST /_aliases { "actions" : [ { "add" : { "index" : "test", "alias" : "alias1", "routing" : "1" } } ] } 使用别名alias1查询内容时,会自动使用该值进行路由。也可以通过search_routing、index_routing分别来指定查询、索引时的路由值,注意,index_routing只能指定一个值。 4、Write Index 如果一个别名只映射了一个真实索引,则可以使用别名进行index api(即索引文档,写文档),但如果一个别名同一时间映射了多个索引,默认是不能直接使用别名进行索引文档,因为ES不知道文档该发往哪个索引。 可以使用is_write_index属性为一个别名下的其中一个索引指定为写索引,此时则可以直接使用别名进行index api的调用。例如: POST /_aliases { "actions" : [ { "add" : { "index" : "test", "alias" : "alias1", "is_write_index" : true } }, { "add" : { "index" : "test2", "alias" : "alias1" } } ] } es index aliases,索引别名就介绍到这里了。 原文发布时间为:2019-03-14本文作者:丁威,《RocketMQ技术内幕》作者。本文来自中间件兴趣圈,了解相关信息可以关注自中间件兴趣圈。