Elasticsearch是一个基于Apache Lucene的搜索和数据分析工具。Elasticsearch使用Lucene作为其核心来实现所有索引和搜索的功能,它通过简单的RESTful API来屏蔽Lucene的复杂性,从而让全文搜索变得简单。
Elasticsearch的特点及优势如下:
分布式的实时文件存储,每个字段都被索引并可被搜索。
分布式的实时分析搜索引擎。
可弹性扩展到上百台服务器规模,处理PB级别结构化或非结构化数据。
支持多种分词插件。
图-1 Elasticsearch组件架构
Gateway是Elasticsearch用来存储索引的文件系统,支持多种存储类型。
Gateway的上层是一个分布式的lucene框架。
Lucene之上是Elasticsearch的模块,包括:索引模块、搜索模块、映射解析模块、数据传输模块等。
Elasticsearch模块之上是Discovery、Scripting和第三方插件。
Discovery是Elasticsearch的节点发现模块,不同机器上的Elasticsearch节点组成集群需要进行消息通信,集群内部需要选举Master节点,这些工作都是由Discovery模块完成,支持多种发现机制,如Zen、EC2。
Scripting用来支持在查询语句中插入javascript、Python等脚本语言,Scripting模块负责解析这些脚本。
Elasticsearch也支持多种第三方插件。
再上层是Elasticsearch的传输模块和JMX。
传输模块支持多种传输协议,如Thrift、Memecached、Http,默认使用Http。
JMX是java的管理框架,用来管理Elasticsearch应用。
最上层是Elasticsearch提供给用户的接口,可以通过RESTful接口和Elasticsearch集群进行交互。
cluster
代表集群,集群包含多个节点,其中有一个Master节点,Master节点通过选举产生,ES集群中的主从节点是针对集群内部而言的。Elasticsearch的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部而言的,因为从外部来看,Elasticsearch集群在逻辑上是个整体,与集群中任何一个节点通信,其效果都是等价的。
index
代表索引,用于存储Elasticsearch的数据,类似于关系型数据库的Database。是一个或多个分片分组在一起的逻辑空间。
shards
代表索引分片,Elasticsearch可以把一个完整的索引分成多个分片,并分布到不同的节点上,构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。
replicas
代表索引副本,Elasticsearch可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高Elasticsearch的查询效率,Elasticsearch会自动对搜索请求进行负载均衡。
document
代表文档,Elasticsearch存储的实体,是可以被索引的基本单位,相当于关系型数据库中的行。
field
代表字段,是组成文档的最小单位。相当于关系型数据库中的column。
mapping
代表类型映射,用来约束字段的类型,可以根据数据自动创建。相当于数据库中的schema。
recovery
代表数据恢复或数据重新分布,Elasticsearch在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。
gateway
代表Elasticsearch索引快照的存储方式,Elasticsearch默认是先把索引存放到内存中,当内存满了时再持久化到本地磁盘。gateway对索引快照进行存储,当这个Elasticsearch集群关闭再重启时就会从gateway中读取索引备份数据。Elasticsearch支持多种类型的gateway,有本地文件系统(默认)、分布式文件系统,如Hadoop的HDFS。
type
type代表文档类型,类似于关系型数据库中的表,用于区分不同的数据。需要注意的是,在Elasticsearch7.x版本中,一个索引只能有一个type且默认使用_doc作为索引的type。Elasticsearch官方声明将在Elasticsearch8版本中彻底移除type。
专有节点:
专有主节点的主要功能是对集群进行操作,例如创建或删除索引,跟踪哪些节点是集群的一部分,并决定哪些分片分配给相关的节点。稳定的主节点对集群健康非常重要。默认情况下集群任一节点都可能被选为主节点,索引数据和搜索查询等操作会占用大量的CPU、内存和IO资源。为了集群的稳定性,建议设置专有主节点,分离主节点和数据节点。
协调节点:
协调节点可以分担数据节点的CPU开销,从而提高处理性能和服务稳定性。如果您的业务是CPU密集型的业务,建议配置协调节点。
分析搜索引擎Elasticsearch适用于以下场景:
运维分析:对IT设备进行运维分析与故障定位、对业务指标分析运营效果。
统计分析:20余种统计分析方法、近10种划分维度。
实时高效:从入库到能够被检索到,时间差在数秒到数分钟之间。
实时检索:站内资料或商品信息更新数秒至数分钟即可被检索。
分类统计:检索同时可以将符合条件的商品进行分类统计。