翻譯自官網(wǎng), 水平有限,用于自查。轉(zhuǎn)載請注明網(wǎng)址: http://www.itdecent.cn/p/2fcd45128405
索引別名
Elasticsearch的api在處理指定索引時接受索引名稱, 并可能接受多個索引。索引別名API允許為索引提供一個別名。 所有API自動將別名切換到實際的索引名稱。 一個別名可以映射到多個索引, 當(dāng)指定它時, 別名會自動擴展到別名索引。 一個別名也可以與一個過濾器相關(guān)聯(lián), 這個過濾器在搜索和路由的時候被自動應(yīng)用。 別名不能具有與索引相同的名稱。
這里有一個將別名alias1和索引test建立聯(lián)系的例子:
POST /_aliases
{
"actions" : [
{ "add" : { "index" : "test1", "alias" : "alias1" } }
]
}
移除這個別名:
POST /_aliases
{
"actions" : [
{ "remove" : { "index" : "test1", "alias" : "alias1" } }
]
}
重命名一個別名使用相同的API, 是一個簡單的刪除再添加的操作。 這是一個原子操作, 不需要擔(dān)心在一個短時間內(nèi)別名無法指向索引。
POST /_aliases
{
"actions" : [
{ "remove" : { "index" : "test1", "alias" : "alias1" } },
{ "add" : { "index" : "test2", "alias" : "alias1" } }
]
}
將一個別名和多個索引建立聯(lián)系,簡單地應(yīng)用多個add動作:
POST /_aliases
{
"actions" : [
{ "add" : { "index" : "test1", "alias" : "alias1" } },
{ "add" : { "index" : "test2", "alias" : "alias1" } }
]
}
多個索引可以通過一個帶有索引數(shù)組語法的操作指定:
POST /_aliases
{
"actions" : [
{ "add" : { "indices" : ["test1", "test2"], "alias" : "alias1" } }
]
}
通過相應(yīng)的aliases數(shù)組語法, 可以在一個動作中指定多個別名。
對于上面的例子, 也可以使用glob pattern建立一個別名到多個索引的聯(lián)系 :
POST /_aliases
{
"actions" : [
{ "add" : { "index" : "test*", "alias" : "all_test_indices" } }
]
}
在這個例子中, 別名是一個時間點別名, 將對所有當(dāng)前匹配的索引進行分組, 當(dāng)匹配該模式的新索引被添加或刪除時, 它不會自動更新。
索引到一個指向多索引的別名是一個錯誤的操作。
可以在一個操作中用別名交換索引:
PUT test //1
PUT test_2 //2
POST /_aliases
{
"actions" : [
{ "add": { "index": "test_2", "alias": "test" } },
{ "remove_index": { "index": "test" } } //3
]
}
- 一個我們錯誤創(chuàng)建的索引
- 我們應(yīng)該添加的索引
- remove_index 同 Delete Index
過濾的別名
帶有過濾器的別名提供了創(chuàng)建相同索引不同“視圖”的簡便方法。 可以使用查詢DSL定義過濾器, 并將其應(yīng)用于所有搜索、計數(shù)、刪除查詢以及類似的使用別名的操作。
要建立一個過濾的別名, 首先我們要確定映射中的字段已存在:
PUT /test1
{
"mappings": {
"type1": {
"properties": {
"user" : {
"type": "keyword"
}
}
}
}
}
現(xiàn)在我們可以使用一個user的過濾器來建立一個別名:
POST /_aliases
{
"actions" : [
{
"add" : {
"index" : "test1",
"alias" : "alias2",
"filter" : { "term" : { "user" : "kimchy" } }
}
}
]
}
路由
可以將路由和別名關(guān)聯(lián)起來。 這個特性可以與過濾的別名一起使用, 以避免不必要的分片操作。
如下命令建立一個新別名alias1, 指向索引test。 在alias1創(chuàng)建后, 所有對這個別名的操作自動修改為使用值 1 來路由:
POST /_aliases
{
"actions" : [
{
"add" : {
"index" : "test",
"alias" : "alias1",
"routing" : "1"
}
}
]
}
也可以對搜索和索引指定不同的路由:
POST /_aliases
{
"actions" : [
{
"add" : {
"index" : "test",
"alias" : "alias2",
"search_routing" : "1,2",
"index_routing" : "2"
}
}
]
}
如上例所示, 搜索路由可能包含多個逗號分隔的值。 索引路由只能包含一個單值。
如果一個搜索操作使用了路由別名并且有一個路由參數(shù), 則使用別名中搜索路由和參數(shù)指定的路由的交集。 例如, 以下命令將使用“2”作為路由值:
GET /alias2/_search?q=user:kimchy&routing=2,3
如果一個索引操作使用索引路由別名并且有一個父路由( parent routing ), 父路由會被忽略。
添加一個單獨的別名
一個別名也可以通過如下端點添加:
PUT /{index}/_alias/{name}
其中:
| 參數(shù) | 含義 |
|---|---|
| index | 別名指向的索引, 可以是任意的:* | _all | glob pattern | name1, name2, … |
| name | 別名的名稱, 這是必須得參數(shù)。 |
| routing | 可選的關(guān)聯(lián)別名的路由 |
| filter | 可選的關(guān)聯(lián)別名的過濾器 |
你也可以使用復(fù)數(shù)的_aliases。
例子:
增加基于時間的別名:
PUT /logs_201305/_alias/2013
增加基于用戶的別名:
先建立索引, 增加user_id字段的映射
PUT /users
{
"mappings" : {
"user" : {
"properties" : {
"user_id" : {"type" : "integer"}
}
}
}
}
為指定的用戶添加別名
PUT /users/_alias/user_12
{
"routing" : "12",
"filter" : {
"term" : {
"user_id" : 12
}
}
}
索引建立過程中的別名
別名還可以在創(chuàng)建索引的過程中指定:
PUT /logs_20162801
{
"mappings" : {
"type" : {
"properties" : {
"year" : {"type" : "integer"}
}
}
},
"aliases" : {
"current_day" : {},
"2016" : {
"filter" : {
"term" : {"year" : 2016 }
}
}
}
}
刪除別名
REST端點:http /{index}/_alias/{name}
其中:
| 參數(shù) | 含義 |
|---|---|
| index | * | _all | glob pattern | name1, name2, … |
| name | * | _all | glob pattern | name1, name2, … |
或者可使用復(fù)數(shù)的別名:
DELETE /logs_20162801/_alias/current_day
獲取存在的別名
獲取索引別名的API支持通過別名名稱和索引名稱篩選。 該api重定向到主節(jié)點并獲取所有請求的索引別名, 如果其可用。 這個api只序列化被發(fā)現(xiàn)的索引別名。
可用選項:
| 參數(shù) | 含義 |
|---|---|
| index | 用于獲取別名的索引名。部分名稱支持通配符, 也可以使用逗號分隔的多個索引名。也可以使用索引的別名 |
| alias | 響應(yīng)中返回的別名的名稱。 和index選項相同, 這個選項支持通配符且可以使用逗號分隔的多個別名名稱 |
| ignore_unavailable | 如果指定的索引名不存在, 設(shè)置為true會忽略這些索引。 |
REST端點:http /{index}/_alias/{alias}
例子
索引的所有別名:
GET /logs_20162801/_alias/*
響應(yīng):
{
"logs_20162801" : {
"aliases" : {
"2016" : {
"filter" : {
"term" : {
"year" : 2016
}
}
}
}
}
}
所有名稱是2016的別名:
GET /_alias/2016
響應(yīng):
{
"logs_20162801" : {
"aliases" : {
"2016" : {
"filter" : {
"term" : {
"year" : 2016
}
}
}
}
}
}
所有名稱由20開始的別名:
GET /_alias/20*
響應(yīng):
{
"logs_20162801" : {
"aliases" : {
"2016" : {
"filter" : {
"term" : {
"year" : 2016
}
}
}
}
}
}
還有一個獲取索引別名api的頭部變體, 以檢查是否存在索引別名。 索引別名和獲取索引別名有著相同的選項。 例如:
HEAD /_alias/2016
HEAD /_alias/20*
HEAD /logs_20162801/_alias/*