es索引别名别名在开发中有什么用?随着业务需求的迭代,旧的业务逻辑将面临更新甚至重构。对于es来说,为了适应新的业务逻辑,可能需要对原有的索引做一些修改,比如调整一些字段,甚至重建索引。在做这些操作的时候,可能会对业务产生影响,甚至出现宕机调整等问题。所以es提供了索引别名来解决这些问题。索引别名就像一个快捷方式或软链接,可以指向一个或多个索引,也可以被任何需要索引名称的API使用。别名的应用为程序提供了极大的灵活性。查询别名GET/nba/_aliasGET/_alias添加别名POST/_aliases{"actions":[{"add":{"index":"nba","alias":"nba_v1.0"}}]}PUT/nba/_alias/nba_v1.1删除别名POST/_aliases{"actions":[{"remove":{"index":"nba","alias":"nba_v1.0"}}]}DELETE/nba/_alias/nba_v1.1重命名POST/_aliases{"actions":[{"remove":{"index":"nba","alias":"nba_v1.0"}},{"add":{"index":"nba","alias":"nba_v2.0"}}]}为多个索引指定别名POST/_aliases{"actions":[{"add":{"index":"nba","alias":"national_player"}},{"add":{"index":"wnba","alias":"national_player"}}]}为同一个索引指定多个别名POST/_aliases{"actions":[{"add":{"index":"nba","alias":"nba_v2.1"}},{"add":{"index":"nba","alias":"nba_v2.2"}}]}阅读别名时按别名索引如果索引由别名指定,则将找到一个索引。GET/nba_v2.1当别名指定多个索引时,会查找多个索引。GET/national_player通过别名写索引当通过别名指定索引时,可以进行写操作。POST/nba_v2.1/_doc/566{"countryEn":"Croatia","teamName":"Clippers","birthDay":858661200000,"country":"Croatia","teamCityEn":"LA","代码":"ivica_zubac","displayAffiliation":"Croatia","displayName":"BrotherIvicaZubac","schoolType":"","teamConference":"WestDepartment","teamConferenceEn":"Western","weight":"108.9kg","teamCity":"LosAngeles","playYear":3,"jerseyNo":"40","teamNameEn":"Clippers","draft":2016,"displayNameEn":"IvicaZubac","heightValue":2.16,"birthDayStr":"1997-03-18","position":"Center","age":22,"playerId":"1627826"}作为别名指定了多个索引,并且可以指定写入某个索引。POST/_aliases{"actions":[{"add":{"index":"nba","alias":"national_player","is_write_index":true}},{"add":{"index":"wnba","alias":"national_player"}}]}POST/national_player/_doc/566{"countryEn":"Croatia","teamName":"Clippers","birthDay":858661200000,"country":"克罗地亚","teamCityEn":"LA","code":"ivica_zubac","displayAffiliation":"Croatia","displayName":"IvicaZubac姐姐","schoolType":"","teamConference":"西部系","teamConferenceEn":"Western","weight":"108.9kg","teamCity":"洛杉矶","playYear":3,"jerseyNo":"40","teamNameEn":"Clippers","draft":2016,"displayNameEn":"IvicaZubac","heightValue":2.16,"birthDayStr":"1997-03-18","position":"Center","age":22,"playerId":"1627826"}es如何重建索引背景Elasticsearch是一个为用户提供搜索服务的实时分布式搜索引擎。当我们决定存储一些数据的时候,我们需要创建索引数据结构是完全确定的,同时索引的设置和很多固定的配置都不会改变。当数据结构需要改变时,需要重建索引。为此,Elastic团队提供了很多辅助工具来帮助开发者重建索引。stepnba取一个别名nba_latest,nba_latest供外部使用。添加一个索引nba_20220101,将结构复制到nba索引中,根据业务需求修改字段。同步nba数据到nba_20220101。将别名nba_latest添加到nba_20220101并删除nba别名nba_latest。删除nba索引。我们使用nba_latest这个别名来提供对nba索引的外部访问1.添加一个索引(比如修改字段类型,将jerseyNo改为关键词类型)PUT/nba_20220101{"mappings":{"properties":{"age":{“类型”:“整数”},“生日”:{“类型”:“日期”},“出生日期”:{“类型”:“关键字”},“代码”:{“类型”:“文本"},"country":{"type":"keyword"},"countryEn":{"type":"keyword"},"displayAffiliation":{"type":"text"},"displayName":{"type":"text"},"displayNameEn":{"type":"text"},"draft":{"type":"long"},"heightValue":{"type":"float"},"jerseyNo":{"type":"keyword"},"playYear":{"type":"long"},"playerId":{"type":"keyword"},"position":{"type":"text"},"schoolType":{"type":"text"},"teamCity":{"type":"text"},"teamCityEn":{"type":"text"},"teamConference":{"type":"keyword"},"teamConferenceEn":{"type":"keyword"},"teamName":{"type":"keyword"},"teamNameEn":{"type":"keyword"},"weight":{"type":"text"}}}}2.把旧的index将数据复制到新索引并同步等待,reindex结束后界面返回POST/_reindex{"source":{"index":"nba"},"dest":{"index":"nba_20220101"}}异步执行,如果reindex时间过长,建议加上参数wait_for_completion=false条件,这样reindex会直接返回taskIdPOST/_reindex?wait_for_completion=false{"source":{"index":"nba"},"dest":{"index":"nba_20220101"}}3.替换别名POST/_aliases{"actions":[{"add":{"index":"nba_20220101","alias":"nba_latest"}},{"remove":{"index":"nba","别名":"nba_latest"}}]}4.删除旧索引DELETE/nba5。通过别名访问新索引POST/nba_latest/_search{"query":{"match":{"displayNameEn":"james"}}}es刷新操作比较理想它被添加到索引中,但实际情况并非如此。我们使用链式命令请求,先添加一个文档,然后立即搜索。curl-XPUTlocalhost:9200/star/_doc/888-H'Content-Type:application/json'-d'{"displayName":"蔡徐坤"}'curl-XGETlocalhost:9200/star/_doc/_search?prettyforcerefreshcurl-XPUTlocalhost:9200/star/_doc/666?refresh-H'Content-Type:application/json'-d'{"displayName":"杨超越"}'curl-XGETlocalhost:9200/star/_doc/_search?pretty修改默认更新时间(默认时间为1s)PUT/star/_settings{"index":{"refresh_interval":"5s"}}将刷新关闭PUT/star/_settings{"index":{"refresh_interval":"-1"}}eshighlightquery前言如果返回的结果集中有很多符合条件的结果,如何才能一眼就看出我们想要的结果呢?比如下面这个网站,我们搜索smalldclassrooms,在结果集中,是否所有的smalldclassrooms都会被高亮?高亮查询POST/nba_latest/_search{"query":{"match":{"displayNameEn":"james"}},"highlight":{"fields":{"displayNameEn":{}}}}自定义高亮查询POST/nba_latest/_search{"query":{"match":{"displayNameEn":"james"}},"highlight":{"fields":{"displayNameEn":{"pre_tags":["
