1、别名(alias)是什么
1.1 官方定义
按照我的习惯,先给出官方对索引别名的定义:索引别名是用于引用一个或多个现有索引的辅助名称。大多数 Elasticsearch API 接受索引别名来代替索引。
1.2 通俗解释
官方给的解释一般来说都很难让人理解,尤其是没接触或使用过的人尤其如此。网上很多解释说索引别名是为了保护索引,可以让索引相对于调用者隐藏起来。其实这样的解释只有懂别名是什么的人才能看懂,而懂的人又不屑于看了
其实索引别名是对索引绑定的另一个名字,一个别名可以绑定多个索引,一个索引也可以绑定多个别名。至于索引的作用和意义,我将用下面例子来解释。先记结论:索引别名非常常用、非常非常重要。
2、别名(alias)有啥用
2.1 类比域名的作用
在解释别名之前,先思考一下,我们常见的域名有什么用?
2.1.1 比 IP 好记
比如 www.baidu.com,比 110.242.68.4 好记的多。
2.1.2 可以绑定多个IP或者应用
比如:
那么 DNS 是如何转发请求的呢?先来看一下用户的一个请求是如何发送到服务器的
所以一般很多大型互联网公司都会在全国甚至全世界范围内部署多个数据中心,那么不同地区的用户只需要通过DNS转发用户请求,就近访问即可,这样速度就提升了很多。这个过程就是从用户请求源头
- person_lt_18
- person_lt_30
- person_gte_30
3、别名(alias)哪里用:使用场景
3.1 滚动索引
PUT _index_template/my_template
{
"index_patterns": ["test_ilm_index_*"],
"template": {
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0,
"index.lifecycle.name": "test_ilm"
}
}
}
3.3 数据流
把索引别名转换为数据流
POST /_data_stream/_migrate/<alias>
4、别名(alias)怎么用
4.1 语法
POST /_aliases
4.2 基本用法
4.2.1 给索引添加别名
给 product 添加别名 product_template
POST _aliases
{
"actions" : [
{ "add" : { "index" : "product", "alias" : "product_template" } }
]
}
4.2.2 给索引更换别名
把 product 的别名重命名为 product_real (原子操作)
POST /_aliases
{
"actions" : [
{ "remove" : { "index" : "product", "alias" : "product_template" } },
{ "add" : { "index" : "product", "alias" : "product_real" } }
]
}
4.2.3 给索引解绑别名
删除 product 的别名 product_real
POST /_aliases
{
"actions" : [
{ "remove" : { "index" : "product", "alias" : "product_real" } }
]
}
4.2.4 绑定多个别名
一个别名绑定多个索引
POST /_aliases
{
"actions" : [
{ "add" : { "index" : "product", "alias" : "product_real2" } },
{ "add" : { "index" : "product2", "alias" : "product_real2" } }
]
}
4.2.5 定义索引时绑定别名
定义索引映射时指定别名
PUT /test
{
"aliases": {
"alias_1": {},
"alias_2": {
"filter": {
"term": { "user.id": "kimchy" }
}
}
}
}
4.2.6 作为字段类型
PUT trips
{
"mappings": {
"properties": {
"distance": {
"type": "long"
},
"route_length_miles": {
"type": "alias",
"path": "distance"
},
"transit_mode": {
"type": "keyword"
}
}
}
}
GET _search
{
"query": {
"range" : {
"route_length_miles" : {
"gte" : 39
}
}
}
}