1、ES基本介绍:
ES是一个开源实时的分布式搜索分析引擎,内部基于Apache Lucene做的索引与搜索。
- 实时表现在:新增到ES的数据1s后可以被检索到(准实时搜索)(详见索引原理)
- 分布式意味着:可以动态的调整集群的规模,进行弹性扩容
- 搜索:内部使用Lucene库提供索引和搜索的功能
- 分析:ES提供大量的聚合功能,可以进行基于搜索和大数据量下数据分析、统计等
2、ES基础概念:
- 集群:一个或多个节点(服务器)的集合,节点通过集群名称加入集群
- 节点:一个Elasticsearch实例
- 索引:具有相似结构的文档的集合
- 分片:ES会将数据分成若干份分配到各个节点上来提高水平扩展能力
- 副本:分片的副本用来提高可用性,同时副本可以使读操作并发执行,分担主分片压力
- 类型:Type是索引的逻辑分类,用于存放不同类型的数据,逻辑上可以理解为index是库,type是表
- 文档:ES是面向文档(Document)的,数据以文档的形式被存储,并且以JSON作为文档的序列化格式
- 映射:用于指定文档中字段的字段属性,比如:字段类型、索引分词器、搜索分词器、权重..等等,类似于关系型数据库的表结构定义
3、ES版本变迁:
- 0.x --> 1.x --> 2.x --> 5.x --> 6.x --> 7.x
当前最新的release版为7.3
并且2.x 版本直接跳到5.x 版本是为了ELK栈(Elasticsearch、Logstash、Kibana)的版本统一,避免因版本选择不对造成的冲突,同时Kibana的版本已经是4.x,所以ELK统一升级为5.0
4、ES版本变迁之新特性:
ES5.0部分新特性如下:
新特性 | 影响 |
---|---|
支持Lucene6.x | 磁盘空间少一半;索引时间少一半;查询性能提升25%,支持IpV6 |
Internal engine级别移除文档并发更新的竞争锁 | 性能提升15%-20% |
新增Sliced Scroll类型 | 支持并发的滚动遍历 |
新增Profile Api | 查询时指定profile:true,将会统计此查询底层的查询情况及耗时,用于优化查询 |
新增Search after机制 | 实时滚动查询,可用于有实时需求的深度分页查询 |
新增Shrink Api | 可将主分片数量收缩为它的因数个数,比如有15个主分片,可以将其收缩为5/3/1个,适用于日志写入压力特别大的收集阶段,可将主分片个数调大来充分利用它的并行写能力,索引完后收缩成更小的分片数来提高查询性能 |
新增Rollover Api | 可以自定义某种规则来轮转索引,类似于每天日志每天一个索引 |
新增Reindex | 支持从一个索引重建到另一个索引,重建过程中可对数据进行修改,使用时指定来源source及目的索引dest,也支持跨集群间的数据迁移 |
新增预处理节点(Ingest node) | 预处理节点集成了logstash的部分能力,可以对数据进行一些转换、过滤等操作,默认情况下所有的节点启用ingest,禁用的话需指定node.ingest:false |
新增Text/keyword类型 | 用于替换string类型,string类型被标记为已过时,并将在6.0删除,其中keyword类型的数据只能做完全匹配查询,适合不需要分词的数据 |
ES5.6开始新增Java High level client | 可以通过调用api的方式执行search, index, delete, update和bulk等操作 |