Elasticsearch源码解析与优化实战:附录 A 重大版本变化
在考虑是否升级到新版本时,第一个问题经常是:版本变化大吗?这是一个很难回答的问题。背后隐含的问题首先是兼容性方面的:原有的业务是否受到影响?哪些特性被废弃了?使用的查询语法是否变了?我们都有哪些相关模块需要做出调整?调整幅度有多大?这些问题都和业务上的实际使用情况有关,没有固定的答案。除了查看版本变更手册,我们需要根据自己的业务使用情况评估版本变化对自己的影响。
除了版本兼容性方面的问题,另一方面是考虑新版本带来了什么好处?例如,写入速度和查询速度是否变快了?添加了哪些新的特性?这些特性对我来说是否有用?
对于是否需要升级到新版本方面,我们的建议是:不要错过每个大版本。如果因为时间原因或懒得对新版本做出适配和调整,则在后期会越来越难升级,以至于最后基本无法升级。当然,也不必因为每个小版本的更新去升级集群,除非修复了一些影响比较大的 bug。在比较注重稳定性的生产环境中,升级版本可以略微保守:可以选择一个大版本并在社区已经大范围应用检验之后升级。
下面列出一些常用内容涉及的变化,完整的版本变更说明可以参考手册:https://www. elastic.co/guide/en/elasticsearch/reference/current/breaking-changes.html。
7.x 重大变化
· 运行时最好用jdk11(LTS)
6.x 重大变化
· 在Linux系统中禁用root用户直接启动,需要新建用户;
· 每个索引支持一个_type;
· 默认禁用_all 字段;
· 优化了 doc values,占用磁盘空间更少,读写速度更快;
· 模板规则定义方式由 template 改为 index_patterns;
· 增加了序列 ID,加快索引恢复速度;
· 查询语法变化比较多,请参阅手册。
5.x 重大变化
· string 类型被 text/keyword 两个类型取代,分别代表分词和不分词;
· 加强了启动过程中的外部环境监测;
· 索引级的设置不能再写到 elasticsearch.yml 配置文件,需要为每个索引单独设置,或者写到模板中;
· 添加了 Profile API、Shrink API、Rollover API、Reindex API;
· 增加了 Ingest Node;
· 添加了 Painless 脚本;
· 增加了 Task Manager,重建索引等任务被 Task Manager 管理,可以观察任务状态,取消任务等;
· 评分算法使用 BM25 代替 TF/IDF。