Elasticsearch快速入门 基础篇 Elasticsearch各版本特性
文章目录
前言
通过上节的内容,相信你已经对 Elasticsearch 概念及主要功能有了一个基本的认识,本文将带你一起探索 Elasticsearch 的版本特性。
一、Elasticsearch 5.x之前
Elasticsearch 5.x 和 Elasticsearch 2.x 并不区别很大。早期的 Elasticsearch 版本各种很混乱,直接升级到5.0了。
二、Elasticsearch 5.x
主要特性:
-
基于 Lucene 6.x
查询性能提升25%,默认打分机制从 TF-IDF 改为 BM 25
-
Internal engine级别移除了用于避免同一文档并发更新的竞争锁,带来15%-20%的性能提升
-
提供了第一个Java原生的REST客户端SDK IngestNode
-
提供了 Painless 脚本,代替Groovy脚本
-
新增了Profile API
-
新增了Rollover API
-
新增Reindex
-
引入新的字段类型 Text/Keyword 来替换 String
-
限制索引请求大小,避免大量并发请求压垮 ES
-
限制单个请求的 shards 数量,默认 1000 个
-
仅支持非root用户启动
三、Elasticsearch 6.x
主要特性:
-
基于 Lucene 7.0
-
稀疏性 Doc Values 的支持
Elasticserach 的 doc values 是列式存储,文档的原始值都是存放在 doc values 里面的。稀疏性是指,一个索引里面,文档的结构其实是多样性的,每个列中的每个字段都预留了一个存储空间,如果只有少数文档出现很多字段,则可能会导致磁盘空间的巨大浪费。
Doc Values的优化解决了这个问题,不仅减少了磁盘空间使用量,同时也减少合并时间并提高查询吞吐量,因为可以更好地利用文件系统缓存,读写速度更快。
-
Index sorting
即在索引阶段的排序,即我们查询的时候有时候会根据某个字段的值进行排序,比如时间、编号等等,如果在索引的时候提取排好序,那么搜索或聚合的时候就会非常快,相应的直接走预先排序好的索引就行了。当然索引的时候会要增加额外开销,适合不怎么变化的索引的场景。
-
顺序号的支持
每个 es 的操作都有一个顺序编号,这个属于 es 内部的一个功能,可以提供:快速的分片副本恢复或同步;跨数据中心的节点恢复;甚至提供一个 Changes API 等等
-
无缝滚动升级
使之能够从 5 的最后一个版本滚动升级到 6 的最后一个版本,不需要集群的完整重启。无缝滚动升级,也就是不用停服务,在线升级。
-
Removal of types
在 6.0 里面,开始不支持一个 index 里面存在多个 type 了,所有的新的 index 都将只有一个虚拟的固定的 type:
_doc
来代替,基于 type 的 parent-child 关系将通过单独的 join 字段来实现, type 会在 7.0 彻底移除。
-
Index-template inheritance
索引版本的继承,目前索引模板是所有匹配的都会合并,这样会造成索引模板有一些冲突问题, 6.0 将会只匹配一个,索引创建时也会进行验证。
-
Load aware shard routing
基于负载的请求路由,目前的搜索请求是全节点轮询,那么性能最慢的节点往往会造成整体的延迟增加,新的实现方式将基于队列的耗费时间自动调节队列长度,负载高的节点的队列长度将减少,让其他节点分摊更多的压力,搜索和索引都将基于这种机制。
已经关闭的索引将也支持 replica 的自动处理,确保数据可靠。
-
跨多个 Elasticsearch 群集搜索(CCR)
和以前一样,Elasticsearch 6.0 能够读取在 5.x 中创建的 Indices ,但不能读取在 2.x 中创建的 Indices 。不同的是,现在不必重新索引所有的旧 Indices ,你可以选择将其保留在 5.x 群集中,并使用跨群集搜索同时在 6.x 和 5.x 群集上进行搜索
四、Elasticsearch 7.x
主要特性:
-
基于 Lucene 8.0
Elasticsearch 7 基于 8.0.0,在索引的兼容性上,他可以直接加载 Elasticsearch 6.0 以上的版本创建的索引,Elasticsearch 5.x 创建的索引需要 reindex 到 Elasticsearch 7.x
-
TOP-K 优化
Lucene 8.0.0 做了大量的新能优化,主要亮点是 TOP-K 的查询优化。在之前的版本中,查询会计算所有命中的文档,但是用户经常查询 ‘a’ , ‘the’ 等词汇,这种词汇不会增加多少文档得分,但迫使查询过程为大量的文档进行打分。
因此,如果检索结果只需要返回 TOP-K 的结果,而非范围准确的命中数量,可以对此进行优化,Lucene 8 中引入了 WAND 算法来实现此特性。当检索结果小于指定的结果总数时,该优化不会生效。在停止计算命中文档总数之后,查询 QPS 得到大幅提升
-
集群连接变化
TransportClient 被废弃,以至于es7的java代码只能使用 RestClient
-
ES数据存储结构变化
正式废除单个索引下多Type的支持,es6时,官方就提到了es7会删除type,并且es6时已经规定每一个index只能有一个type。在es7中使用默认的_doc
作为type,官方说在8.x版本会彻底移除type。api请求方式也发送变化,如获得某索引的某ID的文档:GET index/_doc/id,其中index和id为具体的值
-
High-level REST client 改变
已删除接受Header参数的API方法;Cluster Health API默认为集群级别
-
ES程序包默认打包jdk
以至于7.x版本的程序包大小突然边300MB+对比6.x发现,包大了200MB+, 正是JDK的大小
-
默认配置变化
默认节点名称为主机名,默认分片数改为1,不再是5,避免Over Sharding
总结
以上就是本文的主要内容,本文简单介绍了 Elasticsearch 各个版本的特性,相信聪明的你已经GET到要点了,更多版本特性细节请查阅官网文档。
声明
以上内容均来源于网络,如有错误,请多多包含。