iT邦幫忙

0

Reindex For Elastic ( Version 7.6 )

  • 分享至 

  • xImage
  •  

如果你也是將 Elastic 當作搜尋快取再使用的話,一定也會常常碰到一些情況需要 Reindex。

我們一開始在使用的時候常碰到幾個問題,Logstash 沒指定 db 欄位的 type,到了 elastic 上後結果跟預期不符,或是 db / elastic 上的資料不一致等等問題,這時候我們需要的就是 reindex。

以下就是 reindex 的步驟與一些注意事項。

先開新的 index 假設叫做 member,後面我們加上版本號 member_version_1

PUT /member_verison_1 {}

如果有需要可以先指定 field 的 type

PUT /member_verison_1/_mapping
{
    "properties": {
      "height": {
        "type": "short"
      }
    }
}

在 reindex 的時候就不要 copy 這欄的資料,用 ingest node 搭配 pipeline

先新增 ingest node

PUT _ingest/pipeline/pass_height
{
  "description": "Removes the 'height' field",
  "processors": [
    {
      "remove": {
        "field": ["height"],
        "ignore_missing": true
      }
    }
  ]
}

官網相關說明

準備 OK 開始 reindex

POST _reindex?wait_for_completion=false
{
  "source": {
    "index": "member"
  },
  "dest": {
    "index": "member_version_1",
    "pipeline": "height_error"
  }
}

通常 reindex 都需要一段時間為避免 timeout 加上 wait_for_completion,會回傳 task 的 id,可以在用 task 查詢 reindex 的狀況。

GET /_tasks/HSEnIEfuTaCLI-V7bRj3lg:17533795

接下來要設定 alias,如果原本的 index 就叫 member 沒有加上 version 的話,我們就只能先刪掉原本的 index,再加上 alias

DELETE /member

加上 alias

PUT /member_version_1/_alias/member

如果原本就有設定 alias 的話要先移除

POST /_aliases
{
    "actions" : [
        { "remove" : { "index" : "member_version_1", "alias" : "member" } }
    ]
}

結束,以上就是盡可能平滑無痛 reindex 的步驟,透過 alias 的方式,基本上對前端查詢不會有什麼影響,就算要花一段時間重建也不用擔心囉!


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言