简介
Elasticsearch是当前比较流行的开源的分布式搜索和数据分析引擎,具备易使用、高性能、扩展性强等特点。是ElasticStack的核心组件,以其为核心构建的ELK,已经是日志分析领域的事实标准。Elasticsearch是怎么一步一步发展成熟的呢?
You Know,for Search
2010年2月8日, Shay Banon 发表了一篇博客,说他基于Lucene开发(封装 ???)了一个分布式搜索引擎,实现了一些功能。。。
0.7.0
2010年5月14日发布,第一个可以查询到发版信息的版本,重要特性:
- Zen Discovery 自动发现模块
- Groovy Client支持
- 简单的插件管理机制
- 更好支持ICU分词器
- 更多的管理API
1.0.0
2014年2月14日发布,重要特性:
-Snapshot/Restore API 备份恢复API
- 支持聚合分析Aggregations
- CAT API 支持
- 支持联盟查询
- 断路器支持
- Doc values 引入
2.0.0
2015年10月28日发布,重要特性:
- 增加了 pipleline Aggregations
- query/filter 查询合并,都合并到query中,根据不同的上下文执行不同的查询
- 存储压缩可配置
- Rivers 模块被移除
- Multicast 组播发现被移除,成为一个插件,生产环境必须配置单播地址
5.0.0
2016年10月26日发布,重要特性:
- Lucene 6.x 的支持,磁盘空间少一半;索引时间少一半;查询性能提升25%;支持IPV6。
- Internal engine级别移除了用于避免同一文档并发更新的竞争锁,带来15%-20%的性能提升
- Shrink API ,它可将分片数进行收缩成它的因数,如之前你是15个分片,你可以收缩成5个或者3个又或者1个,那么我们就可以想象成这样一种场景,在写入压力非常大的收集阶段,设置足够多的索引,充分利用shard的并行写能力,索引写完之后收缩成更少的shard,提高查询性能
- 提供了第一个Java原生的REST客户端SDK
- IngestNode,之前如果需要对数据进行加工,都是在索引之前进行处理,比如logstash可以对日志进行结构化和转换,现在直接在es就可以处理了
- 提供了 Painless 脚本,代替Groovy脚本
6.0.0
2017年8月31日发布,重要特性:
- 稀疏性 Doc Values 的支持
- Index sorting,即索引阶段的排序。
- 顺序号的支持,每个 es 的操作都有一个顺序编号(类似增量设计)
- 无缝滚动升级
- Removal of types,在 6.0 里面,开始不支持一个 index 里面存在多个 type
- Index-template inheritance,索引版本的继承,目前索引模板是所有匹配的都会合并,这样会造成索引模板有一些冲突问题, 6.0 将会只匹配一个,索引创建时也会进行验证
- Load aware shard routing, 基于负载的请求路由,目前的搜索请求是全节点轮询,那么性能最慢的节点往往会造成整体的延迟增加,新的实现方式将基于队列的耗费时间自动调节队列长度,负载高的节点的队列长度将减少,让其他节点分摊更多的压力,搜索和索引都将基于这种机制。
- 已经关闭的索引将也支持 replica 的自动处理,确保数据可靠。
7.0.0
2019年4月10日发布,重要特性:
- 引入了真正的内存断路器,它可以更精准地检测出无法处理的请求,并防止它们使单个节点不稳定
- Zen2 是 Elasticsearch 的全新集群协调层,提高了可靠性、性能和用户体验,变得更快、更安全,并更易于使用
- 查询优化
- 更快的前 k 个查询
- 间隔查询
- Function score 2.0