在开发中,随着业务需求的迭代,较⽼的业务逻辑就要⾯临更新甚⾄是重构,⽽对于es来说,为了 适应新的业务逻辑,可能就要对原有的索引做⼀些修改,⽐如对某些字段做调整,甚⾄是重建索 引。
⽽做这些操作的时候,可能会对业务造成影响,甚⾄是停机调整等问题。
由此,es提供了索引 别名来解决这些问题。 索引别名就像⼀个快捷⽅式或是软连接,可以指向⼀个或多个索引,也可 以给任意⼀个需要索引名的API来使⽤。别名的应⽤为程序提供了极⼤地灵活性。
1.查询别名
GET /_alias
效果:
{ "nba" : { "aliases" : { } }, "test" : { "aliases" : { } }, "wba" : { "aliases" : { } }, "cba" : { "aliases" : { } }, "contractinfo" : { "aliases" : { } }, "book" : { "aliases" : { } }, ".kibana_1" : { "aliases" : { ".kibana" : { } } } }
2.新增别名
POST /_aliases { "actions": [ { "add": { "index": "nba", "alias": "nba_aliase" } } ] }
然后查询:
GET /_alias
{ "test" : { "aliases" : { } }, "book" : { "aliases" : { } }, ".kibana_1" : { "aliases" : { ".kibana" : { } } }, "contractinfo" : { "aliases" : { } }, "wba" : { "aliases" : { } }, "cba" : { "aliases" : { } }, "nba" : { "aliases" : { "nba_aliase" : { } } } }
针对性查询:
GET /nba/_alias
{ "nba" : { "aliases" : { "nba_aliase" : { } } } }
3.删除索引
POST /_aliases { "actions": [ { "remove": { "index": "nba", "alias": "nba_aliase" } } ] }
4.重命名索引
POST /_aliases { "actions": [ { "remove": { "index": "nba", "alias": "nba_aliase" } }, { "add": { "index": "nba", "alias": "nba_aliase_2" } } ] }
5.为多个索引新建一个别名
POST /_aliases { "actions": [ { "add": { "index": "cba", "alias": "new_aliase" } }, { "add": { "index": "wba", "alias": "new_aliase" } } ] }
效果:
{ "cba" : { "aliases" : { "new_aliase" : { } } }, ".kibana_1" : { "aliases" : { ".kibana" : { } } }, "test" : { "aliases" : { } }, "wba" : { "aliases" : { "new_aliase" : { } } }, "book" : { "aliases" : { } }, "contractinfo" : { "aliases" : { } }, "nba" : { "aliases" : { "nba_aliase_2" : { } } } }
6.为一个索引建立多个别名
POST /_aliases { "actions": [ { "add": { "index": "nba", "alias": "nba_aliase" } }, { "add": { "index": "nba", "alias": "nba_aliase_2" } } ] }
效果:
{ "nba" : { "aliases" : { "nba_aliase" : { }, "nba_aliase_2" : { } } } }
7.通过别名查询索引
分两种情况。
别名对应一个固定的索引:
GET /nba_aliase
效果:
{ "nba" : { "aliases" : { "nba_aliase" : { }, "nba_aliase_2" : { } }, "mappings" : { "properties" : { "age" : { "type" : "integer" }, "birthDay" : { "type" : "date" }, "birthDayStr" : { "type" : "keyword" }, "code" : { "type" : "text" }, "country" : { "type" : "text" }, "countryEn" : { "type" : "text" }, "displayAffiliation" : { "type" : "text" }, "displayName" : { "type" : "text" }, "displayNameEn" : { "type" : "text" }, "draft" : { "type" : "long" }, "heightValue" : { "type" : "float" }, "jerseyNo" : { "type" : "text" }, "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" } } }, "settings" : { "index" : { "creation_date" : "1586363166694", "number_of_shards" : "1", "number_of_replicas" : "1", "uuid" : "0smbQX5cRY-vyyHWMLtPXA", "version" : { "created" : "7020099" }, "provided_name" : "nba" } } } }
一个别名对应多个索引:
GET /new_aliase
效果:
{ "cba" : { "aliases" : { "new_aliase" : { } }, "mappings" : { "properties" : { "date" : { "type" : "date" }, "jerse_no" : { "type" : "keyword" }, "name" : { "type" : "text" }, "play_year" : { "type" : "long" }, "position" : { "type" : "text" }, "team_name" : { "type" : "text" }, "title" : { "type" : "text" } } }, "settings" : { "index" : { "creation_date" : "1586188945307", "number_of_shards" : "1", "number_of_replicas" : "1", "uuid" : "vFg2Y6mMTZKyjEKNnT_Tvw", "version" : { "created" : "7020099" }, "provided_name" : "cba" } } }, "wba" : { "aliases" : { "new_aliase" : { } }, "mappings" : { "properties" : { "age_range" : { "type" : "integer_range" } } }, "settings" : { "index" : { "creation_date" : "1586187671398", "number_of_shards" : "1", "number_of_replicas" : "1", "uuid" : "p0SCnNhJQTyF1ZM5UMZHdg", "version" : { "created" : "7020099" }, "provided_name" : "wba" } } } }
二:使用别名
1.使用别名进行修改信息
使用nba,因为,索引nba的别名,可以找到唯一的索引是nba
找到要修改的数据:
GET /nba/_doc/1
数据:
{ "_index" : "nba", "_type" : "_doc", "_id" : "1", "_version" : 1, "_seq_no" : 0, "_primary_term" : 1, "found" : true, "_source" : { "countryEn" : "United States", "teamName" : "老鹰", "birthDay" : 831182400000, "country" : "美国", "teamCityEn" : "Atlanta", "code" : "jaylen_adams", "displayAffiliation" : "United States", "displayName" : "杰伦 亚当斯", "schoolType" : "College", "teamConference" : "东部", "teamConferenceEn" : "Eastern", "weight" : "86.2 公斤", "teamCity" : "亚特兰大", "playYear" : 1, "jerseyNo" : "10", "teamNameEn" : "Hawks", "draft" : 2018, "displayNameEn" : "Jaylen Adams", "heightValue" : 1.88, "birthDayStr" : "1996-05-04", "position" : "后卫", "age" : 23, "playerId" : "1629121" } }
使用别名进行修改:
讲年龄调大到25:
POST /nba_aliase/_doc/1 { "countryEn" : "United States", "teamName" : "老鹰", "birthDay" : 831182400000, "country" : "美国", "teamCityEn" : "Atlanta", "code" : "jaylen_adams", "displayAffiliation" : "United States", "displayName" : "杰伦 亚当斯", "schoolType" : "College", "teamConference" : "东部", "teamConferenceEn" : "Eastern", "weight" : "86.2 公斤", "teamCity" : "亚特兰大", "playYear" : 1, "jerseyNo" : "10", "teamNameEn" : "Hawks", "draft" : 2018, "displayNameEn" : "Jaylen Adams", "heightValue" : 1.88, "birthDayStr" : "1996-05-04", "position" : "后卫", "age" : 25, "playerId" : "1629121" }
效果:
{ "_index" : "nba", "_type" : "_doc", "_id" : "1", "_version" : 2, "_seq_no" : 566, "_primary_term" : 1, "found" : true, "_source" : { "countryEn" : "United States", "teamName" : "老鹰", "birthDay" : 831182400000, "country" : "美国", "teamCityEn" : "Atlanta", "code" : "jaylen_adams", "displayAffiliation" : "United States", "displayName" : "杰伦 亚当斯", "schoolType" : "College", "teamConference" : "东部", "teamConferenceEn" : "Eastern", "weight" : "86.2 公斤", "teamCity" : "亚特兰大", "playYear" : 1, "jerseyNo" : "10", "teamNameEn" : "Hawks", "draft" : 2018, "displayNameEn" : "Jaylen Adams", "heightValue" : 1.88, "birthDayStr" : "1996-05-04", "position" : "后卫", "age" : 25, "playerId" : "1629121" } }
2.当别名对应多个索引,进行修改数据
对将要写的索引添加一个标识:
POST /_aliases { "actions": [ { "add": { "index": "cba", "alias": "new_aliase", "is_write_index": true } }, { "add": { "index": "wba", "alias": "new_aliase" } } ] }
要修改的数据如下:
{ "_index" : "cba", "_type" : "_doc", "_id" : "1", "_version" : 1, "_seq_no" : 0, "_primary_term" : 1, "found" : true, "_source" : { "name" : "蔡x坤", "team_name" : "勇⼠", "position" : "得分后卫", "play_year" : 10, "jerse_no" : "31", "title" : "打球最帅的明星", "date" : "2020-01-01" } }
修改:
age提高:
POST /new_aliase/_doc/1 { "name" : "蔡x坤", "team_name" : "勇⼠", "position" : "得分后卫", "play_year" : 13, "jerse_no" : "31", "title" : "打球最帅的明星", "date" : "2020-01-01" }
查询效果:
{ "_index" : "cba", "_type" : "_doc", "_id" : "1", "_version" : 2, "_seq_no" : 2, "_primary_term" : 1, "found" : true, "_source" : { "name" : "蔡x坤", "team_name" : "勇⼠", "position" : "得分后卫", "play_year" : 13, "jerse_no" : "31", "title" : "打球最帅的明星", "date" : "2020-01-01" } }