Elasticsearch快速入门 基础篇 (二)Elasticsearch各版本特性

Elasticsearch快速入门 基础篇 Elasticsearch各版本特性

文章目录

  • Elasticsearch快速入门 基础篇 Elasticsearch各版本特性
  • 前言
  • 一、Elasticsearch 5.x之前
  • 二、Elasticsearch 5.x
  • 三、Elasticsearch 6.x
  • 四、Elasticsearch 7.x
  • 总结
  • 声明
  • 参考文献

前言

通过上节的内容,相信你已经对 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到要点了,更多版本特性细节请查阅官网文档。


声明

以上内容均来源于网络,如有错误,请多多包含。


参考文献

Elasticsearch: 权威指南

Breaking changes in 5.0

Breaking changes in 6.3

Breaking changes in 6.0

Breaking changes in 7.9

Breaking changes in 7.8

Breaking changes in 7.7

Breaking changes in 7.6

Breaking changes in 7.5

Breaking changes in 7.4

Breaking changes in 7.3

Breaking changes in 7.2

Breaking changes in 7.1

Breaking changes in 7.0

Elasticsearch 版本兼容性

你可能感兴趣的:(数据存储专题,#,Elasticsearch专题,elasticsearch,java,搜索引擎,elk)