一、index、type的初衷html
以前es將index、type類比於關係型數據庫(例如mysql)中database、table,這麼考慮的目的是「方便管理數據之間的關係」。mysql
二、爲何如今要移除type?sql
2.1 在關係型數據庫中table是獨立的(獨立存儲),但es中同一個index中不一樣type是存儲在同一個索引中的(lucene的索引文件),所以不一樣type中相同名字的字段的定義(mapping)必須一致。數據庫
2.2 不一樣類型的「記錄」存儲在同一個index中,會影響lucene的壓縮性能。app
三、替換策略elasticsearch
3.1 一個index只存儲一種類型的「記錄」ide
這種方案的優勢:性能
a)lucene索引中數據比較整齊(相對於稀疏),利於lucene進行壓縮。ui
b)文本相關性打分更加精確(tf、idf,考慮idf中命中文檔總數)htm
3.2 用一個字段來存儲type
若是有不少規模比較小的數據表須要創建索引,能夠考慮放到同一個index中,每條記錄添加一個type字段進行區分。
這種方案的優勢:
a)es集羣對分片數量有限制,這種方案能夠減小index的數量。
四、遷移方案
以前一個index上有多個type,如何遷移到3.一、3.2方案?
4.1 先針對實際狀況建立新的index,[3.1方案]有多少個type就須要建立多少個新的index,[3.2方案]只須要建立一個新的index。
4.2 調用_reindex將以前index上的數據同步到新的索引上。
五、參考