別名解決的問題
在運行的集群中可以從一個索引切換到另一個索引
可以給多個索引進行分組
可以與路由搭配使用
別名的相關操作
准備數據階段
PUT l1/doc/1 { "title":"我想要睡你" } PUT l2/doc/1 { "title":"你卻拿我當兄弟" } PUT l3/doc/1 { "title":"不過,我不介意" }
創建別名 給l1索引創建別名a1(_aliases actions add)
POST _aliases { "actions": [ { "add": { "index": "l1", "alias": "a1" } } ] }
查看別名
GET l1/_alias
查看結果
{ "l1" : { "aliases" : { "a1" : { } } } }
刪除別名(actions remove)
POST _aliases { "actions": [ { "remove": { "index": "l1", "alias": "a1" } } ] }
重命名別名(淘汰舊的索引上的別名,生成新的索引上的別名)
POST _aliases { "actions": [ { "remove": { "index": "l1", "alias": "a1" } }, { "add": { "index": "l2", "alias": "a1" } } ] }
為多個索引指向同樣的別名(證實為多個索引分組)
POST _aliases { "actions": [ {"add": {"index": "l1", "alias": "a1"}}, {"add": {"index": "l2", "alias": "a1"}}, {"add": {"index": "l3", "alias": "a1"}} ] }
使用indeices數組語法在一個操作中為多個索引指向別名
多個索引指向同一別名
POST _aliases { "actions": [ {"add": {"indices": ["l1", "l2", "l3"], "alias": "a2"}} ] }
一個索引指向多個別名
POST _aliases { "actions": [ {"add": {"index": "l1", "aliases": ["a1", "a2", "a3"]}} ] }
將別名關聯到擁有公共名稱的索引(將索引 l1 l2 l3指向f1別名)
POST _aliases { "actions": [ {"add": {"index": "l*", "alias": "f1"}} ] }
別名交換
POST _aliases { "actions": [ {"add": {"index": "l1", "alias": "a1"}}, {"remove_index":{"index":"a1"}} ] } # 就像刪除a1別名
過濾器別名
1.自定義索引
2.插入數據
3.普通查詢和根據別名查詢
PUT l4 { "mappings": { "doc":{ "properties":{ "year":{ "type":"integer" }, "method":{ "type":"keyword" } } } } } PUT l4/doc/1 { "year":2019, "method":"GET" } PUT l4/doc/2 { "year":2018, "method":"POST" } PUT l4/doc/3 { "year":2019, "method":"POST" } POST _aliases { "actions": [ { "add": { "index": "l4", "alias": "a4", "filter": { "term": { "year": 2019 } } } } ] } GET l4/doc/_search GET a4/doc/_search
此時兩種查詢結果不同(帶有過濾的只返回2019,而普通查詢會全部返回)
與路由連用
簡單實例
POST _aliases { "actions": [ { "add": { "index": "l4", "alias": "a4", "routing": "2" } } ] }
再列舉一個
POST _aliases { "actions": [ { "add": { "index": "l4", "alias": "a4", "search_routing": "1,2", "index_routing": "1" } } ] }
GET a4/doc/_search?q=year:2019&routing=2 # 取交集2
寫索引(如果多個索引指向一個別名,通過別名寫索引,不指定es不知道)
POST _aliases { "actions": [ { "add": { "index": "l1", "alias": "a1", "is_write_index": true } }, { "add": { "index": "l2", "alias": "a1" } } ] }
添加單個別名
PUT {index}/_alias/{name} PUT {index}/_alias/{name}?routing=user1
- index,要為哪個索引添加別名。
- name,別名的名稱。
- routing,可以與別名關聯的路由。
刪除別名
DELETE l1/_alias/a1 DELETE l2/_aliases/a*
檢索現有別名
GET l1/_alias/a* # 查詢索引l1指向以a開頭的所有別名 GET l1/_alias/* # 查詢索引l1所有的別名
查詢所有別名是a1
GET /_alias/a1
HEAD檢測別名是否存在
GET _cat/aliases
HEAD _alias/a1