Elasticsearch Index Aliases详解

Stella981
• 阅读 972

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

index aliases,索引别名,有点类似名称映射,一个索引别名可以映射多个真实索引,索引别名在定义时还支持filter,构成同一个索引,不同的视图。

思考:一个索引别名可以映射成多个索引,那如果向一个别名添加一个文档时,会在该别名下对应的所有索引下都创建一个文档?

如何创建索引别名

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

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

为索引创建别名,也可以在创建索引API中指定:

 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定义,并应用于所有搜索、计数、按查询删除以及类似于此别名的操作。

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

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

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

 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

在创建别名时可以指定路由值。

 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的书籍。

本文分享自微信公众号 - 中间件兴趣圈(dingwpmz_zjj)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
添砖java的啾 添砖java的啾
3年前
distinct效率更高还是group by效率更高?
目录00结论01distinct的使用02groupby的使用03distinct和groupby原理04推荐groupby的原因00结论先说大致的结论(完整结论在文末):在语义相同,有索引的情况下groupby和distinct都能使用索引,效率相同。在语义相同,无索引的情况下:distinct效率高于groupby。原因是di
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Easter79 Easter79
3年前
sql注入
反引号是个比较特别的字符,下面记录下怎么利用0x00SQL注入反引号可利用在分隔符及注释作用,不过使用范围只于表名、数据库名、字段名、起别名这些场景,下面具体说下1)表名payload:select\from\users\whereuser\_id1limit0,1;!(https://o
Stella981 Stella981
3年前
Elasticsearch Index Setting一览表
微信公众号:\中间件兴趣圈\作者简介:《RocketMQ技术内幕》作者索引的配置项按是否可以更改分为static属性与动态配置,所谓的静态配置即索引创建后不能修改。索引静态配置index.number\_of\_shards索引分片的数量。在ES层面可以通过es.index.max\_num
Stella981 Stella981
3年前
ES中删除索引的mapping字段时应该考虑的点
1.创建新索引2.新索引创建新mapping3.原索引导出数据到新索引4.新索引创建原索引一致的别名5.删除原索引针对于第四步:这个就要用到索引别名了,如果你最开始建索引的时候没有考虑设计索引别名,那就杯具了。你可以把索引的名称设置成name\_v1 别名设置为name,然后代码里面访问搜索的时候连接的其实是别名na
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Stella981 Stella981
3年前
ELK学习笔记之ElasticSearch的索引详解
0x00ElasticSearch的索引和MySQL的索引方式对比Elasticsearch是通过Lucene的倒排索引技术实现比关系型数据库更快的过滤。特别是它对多条件的过滤支持非常好,比如年龄在18和30之间,性别为女性这样的组合查询。倒排索引很多地方都有介绍,但是其比关系型
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这