es 索引別名
阿新 • • 發佈:2021-12-02
es 索引別名
別名是指給一個或者多個索引定義另外一個名稱,使索引別名和索引之間可以建立某種邏輯關係。
可以用別名表示別名和索引之間的包含關係。例如,我們建立了10月、11月、12月的使用者入住酒店的日誌索引,假設需要搜尋這3個月的日誌索引,如果分別去3個索引中進行搜尋,這種編碼方案比較低效。此時可以建立一個別名4_quarter,設定前面的3個索引的別名為4_quarter,然後在4_quarter中進行搜尋即可。
建立10_month_log,11_month_log ,12_month_log 3個索引:
PUT /10_month_log PUT /11_month_log PUT /12_month_log {"mappings":{ "properties":{ "uid":{ //使用者ID欄位 "type":"keyword" }, "hotel_id":{ //酒店ID欄位 "type":"keyword" }, "check_in_date":{ //入住日期欄位 "type":"keyword" } } } }
寫入文件:
POST /10_month_log/_doc/001 { //寫入的文件資料 "uid":"001", "hotel_id":"1", "check_in_date":"2021-10-05" } POST /11_month_log/_doc/002 { //寫入的文件資料 "uid":"002", "hotel_id":"1", "check_in_date":"2021-11-05" } POST /12_month_log/_doc/003 { //寫入的文件資料 "uid":"003", "hotel_id":"1", "check_in_date":"2021-12-05" }
設定上面3個索引的別名為4_quarter,請求的DSL如下:
POST /_aliases { "actions": [ { "add": { //為索引10_month_log建立別名4_quarter "index": "10_month_log", "alias": "4_quarter" } }, { "add": { //為索引11_month_log建立別名4_quarter "index": "11_month_log", "alias": "4_quarter" } }, { "add": { //為索引12_month_log建立別名4_quarter "index": "12_month_log", "alias": "4_quarter" } } ] }
此時,請求在索引4_quarter中搜索hotel_id為1的使用者的入住記錄,搜尋的DSL如下:
GET /4_quarter/_search { "query": { "term": { //搜尋hotel_id為1的文件 "hotel_id": "1" } } }
在預設情況下,當一個別名只指向一個索引時,寫入資料的請求可以指向這個別名,如果這個別名指向多個索引,則寫入資料的請求是不可以指向這個別名的。
ES不能確定向4_quarter寫入資料時的轉發物件。這種情況需要在別名設定時,將目標索引的is_write_index屬性值設定為true來指定該索引可用於執行資料寫入操作。例如設定12_month_log為資料寫入轉發物件,對應的DSL如下:
POST /_aliases { "actions": [ { "add": { //設定12_month_log為索引別名4_quarter的資料寫入轉發物件 "index": "12_month_log", "alias": "4_quarter", "is_write_index":true } } ] }
文章參考:Elasticsearch搜尋引擎構建入門與實戰 -->3.1.5 索引別名