Elasticsearch 倒排索引與重建索引

一. 倒排索引

1.1 倒排索引的結構

(1)包含這個關鍵詞的document list
(2)包含這個關鍵詞的所有document的數量:IDF(inverse document frequency)
(3)這個關鍵詞在每個document中出現的次數:TF(term frequency)
(4)這個關鍵詞在這個document中的次序
(5)每個document的長度:length norm
(6)包含這個關鍵詞的所有document的平均長度

1.2 倒排索引不可變的好處

(1)不需要鎖,提升併發能力,避免鎖的問題
(2)數據不變,一直保存在os cache中,只要cache內存足夠
(3)filter cache一直駐留在內存,因爲數據不變,同一個過濾條件下得到的bitset一定不會變。
(4)可以壓縮,節省cpu和io開銷

二. 重建索引

沒有哪一個架構師敢說自己設計的index完美無缺,經過一段時間的使用後,往往會根據實際的業務場景,對原有結構進行調整。但遺憾的是,ES不允許對已存在的字段進行修改和刪除,比如不能修改字段的類型,字段的分詞器,增加新的子字段等操作,原因是這樣會倒排索引的結構發生變化。
重建索引的方法如下: 新建一個index,爲其設置定製化的mapping,接着將舊數據從舊索引中遷移到新索引中。遷移數據的方法非常多,比如通過scroll滾動讀取數據,接着通過bulk POST create操作,將數據批量新增至新索引。
但重建索引不可避免的帶來一個問題: 需要重新創建一個新索引。如果程序中操作ES的代碼在書寫index時使用了硬編碼,那麼重建索引就會導致整個系統不可用,必須修改代碼再重啓系統才能恢復功能。爲了避免重啓系統,實現零停機,我們需要在程序中使用index的別名

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章