1. 程式人生 > >解決elasticsearch5.x中IK分詞不能用的問題

解決elasticsearch5.x中IK分詞不能用的問題

一、概述

環境:elasticsearch版本5.6.3,Springboot 2.0.2.RELEASE,索引myIndex

問題描述:使用@Field註解給實體類指定ik分詞解析器(ik_smart/ik_max_word),測試分詞功能,發現並不能達到預期的效果,檢視mapping,並沒有自動生成ik配置。

二、解決方案

由於elasticsearch索引一旦建立,就無法動態修改其欄位的對映型別,為了不影響線上的訪問,需要無縫切換到新的索引上。使用 elasticsearch 提供的 reindex api 來遷移資料,建立新的索引

1. 建立新的索引

PUT /myIndex_v2

2. 設定新索引的mapping

PUT /myIndex_v2/_mapping/myIndex_v2

{
  "properties": {
    "title": {
      "type": "text",
      "analyzer": "ik_smart",
      "search_analyzer": "ik_smart",
      "fields": {
        "keyword": {
        "type": "keyword",
        "ignore_above": 256
        }
      }
    },
    "content": {
      "type": "text",
      "fields": {
        "keyword": {
        "type": "keyword",
        "ignore_above": 256
        }
      }
    },
    "createTime": {
      "type": "long"
    }
  }
}

3. 同步資料

使用 reindex 將原來的索引重建到新的索引上

POST /_reindex

{
    "source": {
        "index": "myIndex"
    },
    "dest": {
        "index": "myIndex_v2"
    }
}        

4. 檢視資料是否已同步到新的索引上

GET /myIndex_v2/_search

5. 使用別名,切換索引(同時刪除原索引myIndex)

POST /_aliases

{
    "actions": [
        {
            "add": {
            "index": "myIndex_v2",
            "alias": "myIndex"
            }
        },
        {
            "remove_index": {
            "index": "myIndex"
            }
        }
    ]
}                    

  大功告成,現在可以同時使用myIndex和myIndex_v2搜尋資料

參考:https://javasgl.github.io/elastic-search-reindex/

   https://javasgl.github.io/use-alias-migrate-index/