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