Elasticsearch索引別名使用


背景

項目中使用的老的索引,由於數據冗余,會想影響性能。因此需要重新建立索引,但是這樣必然需要更新服務中的索引名稱,然后重新啟動服務,可能會對服務的使用者產生一定的影響。因此,調研了Elasticsearch的索引別名,來解決這個問題。

簡介

索引別名就像一個快捷方式或軟連接,可以指向一個或多個索引,也可以給任何一個需要索引名的API來使用。別名 帶給我們極大的靈活性,我們可以使用索引別名實現以下功能:

  • 在運行的集群中可以無縫的從一個索引切換到另一個索引
  • 給多個索引分組 (例如, last_three_months)
  • 給索引的一個子集創建視圖

索引別名的使用

目前,有兩種管理別名的方式,_alias 用於單個操作, _aliases 用於執行多個原子級操作

創建別名的步驟如下:
1、 首先我們創建一個索引my_index_v1

PUT /my_index_v1

2、然后設置索引別名 my_index 指向 my_index_v1

PUT /my_index_v1/_alias/my_index

現在,我們可以通過以下命令行檢測my_index別名指向了哪一個索引

GET /*/_alias/my_index

也可以通過下面的命令行查詢哪些別名指向了my_index_v1索引

GET /my_index_v1/_alias/*

現在,加入我們在時使用中發現了一些問題,需要優化my_index_v1索引,比如修改mapping,此時,我們必須重新索引數據,設置mapping。首先,我們還是和上面一樣,新建了一個新的索引my_index_v2。

此時,我們就可以使用索引別名,將別名my_index指向my_index_v2,同時,我們還需要將my_index_v1的別名移除。這個操作需要原子化,這意味這我們需要使用_aliases操作,具體命令如下

POST /_aliases
{
    "actions": [
        { "remove": { "index": "my_index_v1", "alias": "my_index" }},
        { "add":    { "index": "my_index_v2", "alias": "my_index" }}
    ]
}

此時,我們的應用在沒有重新啟動的情況下,從舊的索引移到了新的索引,對用戶來說是完全無感知的,非常友好。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM