elasticsearch 7.0 new - yaokun123/php-wiki GitHub Wiki

es7.0新特性

一、Elasticsearch&Kibana 7.部署体验

1.1、Elasticsearch 7.0 默认自带 JDK

不用再为安装什么版本的 JDK和环境冲突而苦恼了,下载安装即可使用。 
对比可知,包大了200MB+,正是JDK的大小。

1.2、默认节点名称为主机名

不过仍然可以在elasticsearch.yml中显式配置。
实际业务场景中,以主机名区分不同节点比随机起名字更便于甄别,不易混淆。

1.3、默认主分片数改为1,不再是5。

"number_of_shards" :   5,    // 7.0之后改为1
"number_of_replicas" : 1

1.4、Elasticsearch 7.0 没有 Type 了,包括 API 层面的。

确切的说,正确的使用方法,使用默认的_doc作为type就可以了。
type会在8.X版本彻底移除

1.5、hits.total返回对象,而非仅结果值(注意:可能会影响到应用程序)

"hits":{
  "total":{
    "value":100,            // value表示匹配的匹配数
    "relation":"eq"         // relation表示值是准确的(eq)还是非准确的(gte)
  }
}

1.6、Kibana 支持全局开启“黑暗”模式

二、Elasticsearch7 革命性更新

2.1、查询相关性速度优化

Weak-AND算法在Term Query查询场景有3700%的性能提升。
如下所示,除了Term检索,Fuzzy,Phrase, Bool And .Bool OR都有大幅的性能提升!

啥是weak-and算法?核心原理:取TOP N结果集,估算命中记录数。

简单来说,一般我们在计算文本相关性的时候,会通过倒排索引的方式进行查询,
通过倒排索引已经要比全量遍历节约大量时间,但是有时候仍然很慢。
原因是很多时候我们其实只是想要top n个结果,一些结果明显较差的也进行了复杂的相关性计算,
而weak-and算法通过计算每个词的贡献上限来估计文档的相关性上限,从而建立一个阈值对倒排中的结果进行减枝,从而得到提速的效果。

2.2、间隔查询(Intervals queries)

某些搜索用例(例如,法律和专利搜索)引入了查找单词或短语彼此相距一定距离的记录的需要。 

Elasticsearch 7.0中的间隔查询引入了一种构建此类查询的全新方式,与之前的方法(跨度查询span queries)相比,使用和定义更加简单。 

与跨度查询相比,间隔查询对边缘情况的适应性更强。

2.3、引入新的集群协调子系统

移除 minimum_master_nodes 参数,让 Elasticsearch 自己选择可以形成仲裁的节点。
典型的主节点选举现在只需要很短的时间就可以完成。 
集群的伸缩变得更安全、更容易,并且可能造成丢失数据的系统配置选项更少了。
节点更清楚地记录它们的状态,有助于诊断为什么它们不能加入集群或为什么无法选举出主节点。

2.4、升级 Elasticsearch 7,0 ,不再内存溢出

新的 Circuit Breaker 在JVM 堆栈层面监测内存使用,Elasticsearch 比之前更加健壮。

设置indices.breaker.fielddata.limit的默认值已从JVM堆大小的60%降低到40%。

2.5、时间戳纳秒级支持,提升数据精度

利用纳秒精度支持加强时间序列用例

到目前为止,Elasticsearch仅以毫秒精度存储时间戳。
7.0增加了几个零并带来了纳秒精度,这提高了高频数据采集用户存储和排序所需数据的精度。

三、Elasticsearch 7升级注意事项

3.1、升级前必知必会

1、查看新版本的重大更改特性,并对7.0.0的代码和配置进行必要的更改。
2、如果您使用自定义插件,请确保兼容版本可用。
3、在升级生产集群之前,在开发环境中测试升级。
4、备份您的数据! 您必须拥有数据快照才能回滚到早期版本。

3.2、升级API

Rolling upgrade ——滚动升级允许Elasticsearch集群一次升级一个节点,升级不会中断服务。

不支持在升级期间在同一群集中运行多个版本的Elasticsearch,因为无法将已升级的节点复制到运行旧版本的节点。