Elasticsearch Index Aliases详解

微信公众号:[中间件兴趣圈]
做者简介:《RocketMQ技术内幕》做者;java

index aliases,索引别名,有点相似名称映射,一个索引别名能够映射多个真实索引,索引别名在定义时还支持filter,构成同一个索引,不一样的视图。数据库

思考:一个索引别名能够映射成多个索引,那若是向一个别名添加一个文档时,会在该别名下对应的全部索引下都建立一个文档?api

如何建立索引别名

1POST /_aliases
2{
3    "actions" : [
4        { "remove" : { "index" : "test1", "alias" : "alias1" } },
5        { "add" : { "index" : "test2", "alias" : "alias1" } }
6    ]
7}

索引建立API,支持add、remove操做,当前Restfull java客户端未封装该方法。微信

为索引建立别名,也能够在建立索引API中指定:app

1PUT test
 2{
 3    "aliases" : {
 4        "alias_1" : {},
 5        "alias_2" : {
 6            "filter" : {
 7                "term" : {"user" : "kimchy" }
 8            },
 9            "routing" : "kimchy"
10        }
11    }
12}

Filtered Aliases

带有过滤器的别名提供了建立相同索引的不一样“视图”的简单方法。过滤器能够使用查询DSL定义,并应用于全部搜索、计数、按查询删除以及相似于此别名的操做。运维

其使用示例以下,假设存储该索引:ide

1PUT /test1
 2{
 3  "mappings": {
 4    "_doc": {
 5      "properties": {
 6        "user" : {
 7          "type": "keyword"
 8        }
 9      }
10    }
11  }
12}

为别名设置过滤器的使用方法以下:code

1POST /_aliases
 2{
 3    "actions" : [
 4        {
 5            "add" : {
 6                 "index" : "China_Provice_Index",
 7                 "alias" : "shanghai_index",
 8                 "filter" : { "term" : { "provice" : "shanghai" } }
 9            },
10   "add" : {
11                 "index" : "China_Provice_Index",
12                 "alias" : "guangzhou_index",
13                 "filter" : { "term" : { "provice" : "guangzhou" } }
14            }
15        }
16    ]
17}

经过为China_Provice_Index(中国各省份人才数据库索引)建立别名,shanghai_index、guangzhou_index,这样从两个别名进行数据查询,只会查出各自省份的数据,是否是有点相似于”多租户“,也即经过索引别名并指定过滤器,能为同一个索引提供不一样的视图。中间件

Routing

在建立别名时能够指定路由值。blog

1POST /_aliases
 2{
 3    "actions" : [
 4        {
 5            "add" : {
 6                 "index" : "test",
 7                 "alias" : "alias1",
 8                 "routing" : "1"
 9            }
10        }
11    ]
12}

使用别名alias1查询内容时,会自动使用该值进行路由。

也能够使用search_routing、index_routing分别来指定查询、索引时的路由值,注意,index_routing只能指定一个值。

Write Index

若是一个别名只映射了一个真实索引,则能够使用别名进行index api(即索引文档,写文档),但若是一个别名同一时间映射了多个索引,默认是不能直接使用别名进行索引文档,由于ES不知道文档该发往哪一个索引。

能够使用is_write_index属性为一个别名下的其中一个索引指定为写索引,此时则能够直接使用别名进行index api的调用。例如:

1POST /_aliases
 2{
 3    "actions" : [
 4        {
 5            "add" : {
 6                 "index" : "test",
 7                 "alias" : "alias1",
 8                 "is_write_index" : true
 9            }
10        },
11        {
12            "add" : {
13                 "index" : "test2",
14                 "alias" : "alias1"
15            }
16        }
17    ]
18}

es index aliases,索引别名就介绍到这里了。

更多文章请关注中间件兴趣圈:
Elasticsearch Index Aliases详解
做者新书《RocketMQ技术内幕》已成功上市。
Elasticsearch Index Aliases详解《RocketMQ技术内幕》已出版上市,目前可在主流购物平台(京东、天猫等)购买,本书从源码角度深度分析了RocketMQ NameServer、消息发送、消息存储、消息消费、消息过滤、主从同步HA、事务消息;在实战篇重点介绍了RocketMQ运维管理界面与当前支持的39个运维命令;并在附录部分罗列了RocketMQ几乎全部的配置参数。本书获得了RocketMQ创始人、阿里巴巴Messaging开源技术负责人、Linux OpenMessaging 主席的高度承认并做序推荐。目前是国内第一本成体系剖析RocketMQ的书籍。

相关文章
相关标签/搜索