yii2-elasticsearch(5)索引別名

前言

以前不知道es還有別名這個東西,直到碰見了一個問題,請教公司的大神,才發現索引別名這個東西必不可少。
產品有個需求,從我技術的角度描述是這樣的:將搜索結果按品牌分組統計數量,取數量最多的前五十個品牌顯示在頁面上。這個需求不難,用es的聚合很容易就能獲得,可是品牌我當時用的是text,這個類型貌似不支持分組聚合,要改爲keyword才能夠。
我想刪掉原來的mapping,再從新構建一個新的。不過當時crontab中運行了一個定時向es導入的腳本,我雖然刪掉了mapping,但由於就算沒有mapping,es也會本身分析新創建一個mapping,致使我新建的時候,就會提示這個索引已存在。
後來諮詢了一下大神,告訴我索引用一個新的名字,新mapping建好以後,建立一個跟以前索引同樣的別名,並指向新的索引,就能夠實現平滑遷移了。html

具體參數

假設原來的index命名爲product_index
咱們要建立的新的index命名爲product_index_1mysql

PUT /product_index_1
{
    "mappings": {
        "my_type": {
            "properties": {
                "brand": {
                    "type":   "keyword",
                }
            }
        }
    }
}
POST /_aliases
{
    "actions": [
        { "remove": { "index": "*", "alias": "product_index" }},
        { "add":    { "index": "product_index_1", "alias": "product_index" }}
    ]
}

建立好新的索引,而後刪除掉全部以product_index爲別名的索引,而後將別名product_index指向product_index_1索引。sql

注意

新創建的索引裏面確定是沒有數據的,要保證不影響搜索結果,先把數據補充上,而後再改別名,我不建議直接用es當數據庫,怕誤刪,數據都是從mysql裏面導入的,目的只是爲加快全文檢索。數據庫

參考:
官方文檔:https://www.elastic.co/guide/...
還有一篇文章介紹了其餘的別名應用場景:
https://www.cnblogs.com/rainw...app

相關文章
相關標籤/搜索