1、index、type的初衷
之前es將index、type類比於關系型數據庫(例如mysql)中database、table,這么考慮的目的是“方便管理數據之間的關系”。
2、為什么現在要移除type?
2.1 在關系型數據庫中table是獨立的(獨立存儲),但es中同一個index中不同type是存儲在同一個索引中的(lucene的索引文件),因此不同type中相同名字的字段的定義(mapping)必須一致。
2.2 不同類型的“記錄”存儲在同一個index中,會影響lucene的壓縮性能。
3、替換策略
3.1 一個index只存儲一種類型的“記錄”
這種方案的優點:
a)lucene索引中數據比較整齊(相對於稀疏),利於lucene進行壓縮。
b)文本相關性打分更加精確(tf、idf,考慮idf中命中文檔總數)
3.2 用一個字段來存儲type
如果有很多規模比較小的數據表需要建立索引,可以考慮放到同一個index中,每條記錄添加一個type字段進行區分。
這種方案的優點:
a)es集群對分片數量有限制,這種方案可以減少index的數量。
4、遷移方案
之前一個index上有多個type,如何遷移到3.1、3.2方案?
4.1 先針對實際情況創建新的index,[3.1方案]有多少個type就需要創建多少個新的index,[3.2方案]只需要創建一個新的index。
4.2 調用_reindex將之前index上的數據同步到新的索引上。