Elasticsearch---效能提升建議
阿新 • • 發佈:2019-01-05
文章目錄
伺服器層面
伺服器層面的優化主要是記憶體和負載均衡。避免ES由於JVM大於32G而導致不採用記憶體物件指標壓縮技術,導致索引佔用空間更大。避免沒有做到ES分片沒有很好的負載,導致一個節點中 承擔了過多的處理導致拖慢整個處理時間。當然還有其他方面的優化
- 採用SSD作為儲存裝置。
- 使用本地儲存,避免使用NFS或者SMB
- 注意使用虛擬儲存
- 使用效能更好的CPU,高併發
- 負載均衡
- JVM設定
程式碼層面
程式碼層面主要是在開發基於ES的搜尋功能時候,要儘量考慮到業務層面和效能的取捨,同時也要考慮到提升搜尋的召回率和精準度,以此為基礎才能做好搜尋業務滿足業務和使用者的使用目的。在業務面前效能在可接受範圍內就算正常。接下來進行梳理一些專案中用到的注意點(不足的歡迎提供建議
)
-
避免使用scripts指令碼進行處理聚合等操作,除非和業務緊關聯。
-
不使用
_all
,因為業務層面已經是對精確的欄位進行搜尋。 -
用
bulk
進行批量增加或修改 -
分頁情況採用
from-to
方式。 當需要返回全量資料時,要採用scroll形式。 -
中文分詞 建議採用IK。可以方便的和ES進行配置,並配置層面增加停用詞的介面配置。並且分詞效果要比官方提供的和其他cn分詞庫要好很多。
-
分頁情況下 比建議使用聚合函式,萬用字元,模糊搜尋和fliter操作。
-
尋找相關詞可為了替換much_pharse帶來的效能問題的首選。
-
過濾集提升權重 適合用作評分 ( 對一個實體中 特定欄位進行評分過濾出 最關注的內容 )
表結構層面
- 主分片是為了提高吞吐量(叢集情況下),主分片設定的大小要進行結合叢集節點數和單節點符合業務容忍度時延共同推導決定。以實際的生產環境為主。
- 副本分片 作為容災恢復 建議預設即可。
- 更改相似度演算法。BM25
- 對於一些業務強相關的分索引,分庫 或 同庫的情況 要結合場景需求。比如不相關的要進行分索引,相關log按日期分庫,企業員工同庫。