ElasticSearch教程(入门到精通万字图文详解)

ElasticSearch教程(入门到精通万字图文详解)-mikechen

ElasticSearch定义

ElasticSearch教程(入门到精通万字图文详解)-mikechen

Elaticsearch,简称为ES, 是一款大数据场景下的分布式全文搜索引擎,是建立在全文搜索引擎 Apache Lucene基础上的搜索引擎。

Elaticsearch是ELK生态中的的一个产品,ELK代表的是:E就是ElasticSearch,L就是Logstach,K就是kibana。

 

ElasticSearch特点

ElasticSearch的特点有:

  • 搜索结果速度非常快;
  • 支持分布式;
  • 支持多语种:
  • 索引自动分片;
  • 索引副本机制;
  • restful风格接口等。

 

ElasticSearch应用场景

ElasticSearch应用场景主要包含如下:

1.搜索引擎

ElasticSearch为搜索而生,用于搭建全文搜索系统是自然而然的事情,它能够提供快速的索引和搜索功能。

在这类场景中较典型的应用领域是,

  1. 电商搜索;
  2. 地图搜索;
  3. 新闻搜索;
  4. 等各类站内搜索。

举个简单的例子,比如:要买手机,你登陆淘宝后,在搜索框搜索”手机“,会出现N个手机和手机周边的搜索数据。

ElasticSearch教程(入门到精通万字图文详解)-mikechen

再比如:类似百度,在网站的站内搜索,IT系统的检索等等,都是典型的搜索应用场景。

 

2.日志分析

ElasticSearch官方提供的ELK,也就是Elasticsearch+Logstash+Kibana全家桶简称,可以完成日志采集再到可视化的数据分析工作。

日志分析整体架构,如下图所示:

ElasticSearch教程(入门到精通万字图文详解)-mikechen

Logstash主要用于:采集日志,作为日志的搜集、分析、过滤日志等的工具,支持大量的数据获取方式。

日志主要包括:系统日志、应用程序日志、以及安全日志等。

日志的作用:系统运维和开发人员可以通过日志了解服务器软硬件信息,经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。

日志采集之后,我们可以使用ElasticSearch来作为数据存储,以及搜索使用,暴露出具体的API等接口(基于RESTful web接口),然后使用Kibana来展示界面。

这里的Kibana的主要作用:Kibana为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

 

3.海量数据查询

目前大量的系统用MySQL作为数据库,但随着业务的开展数据量会越来越大,而MySQL的性能会越来越差。

虽然可以通过分库分表的方案进行解决,但是操作比较复杂,而且往往每隔一段时间就需要进行扩展,这种情况下可以将数据从MySQL同步到Elasticsearch。

改进后,整体架构如下图所示:

ElasticSearch教程(入门到精通万字图文详解)-mikechen

针对实时性要求不太高,或者主要查询历史数据且数据量比较大的场景:使用ElasticSearch提供查询。

而对需要事务实时控制的即时数据还是通过MySQL存储和查询。

 

ElasticSearch系统架构

ElasticSearch整体架构,如下图所示:

ElasticSearch教程(入门到精通万字图文详解)-mikechen

  1. 一个 ElasticSearch Index 在集群模式下,有多个 Node (节点)组成;
  2. 每个节点就是 ES 的Instance (实例),每个节点上会有多个 shard (分片),每个分片又分为:主分片与副本分片;
  3. 每个分片上对应着就是一个 Lucene Index底层索引文件;
  4. Lucene Index 是一个统称由多个 Segment 段文件,就是倒排索引组成,每个段文件存储着就是 Doc 文档;

 

ElasticSearch基本原理

谈到ElasticSearch原理,就会涉及到6大核心设计:

1.index 索引

索引是具有相似特征的文档的集合,类似于关系数据库中mysql的索引 ,包括:配置信息mapping和倒排索引数据文件。

一个索引的数据文件可能会分布于一台机器,也有可能分布于多台机器。

2.Mapping映射

Mapping:相当于数据库中的 schema,用来约束字段的类型,不过 Elasticsearch 的 mapping 可以自动根据数据创建。

3.type 类型

type:表示一类相似的文档,作为一个元数据来实现逻辑划分,类比传统的关系型数据库领域来说,类型相当于“表”。

4.document 文档

document:是在ElasticSearch中可以被索引的基本单位,以JSON表示,类似于关系数据库中的一行。

5.Field 字段

Field是Elasticsearch的最小单位,一个document里面有多个field,这个与MySQL表中的字段类似的作用。

6.shard 分片

单台机器无法存储大量数据,为了支持更大量的数据,ElasticSearch可以将一个索引中的数据切分为多个shard分片。

ElasticSearch的分片(shard)机制:将一个索引内部的数据分布地存储于多个节点。

将一个索引切分为多个底层物理的 Lucene 索引,完成索引数据的分割存储功能,这每一个物理的 Lucene 索引称为一个分片(shard)。

分片有两种:

  • 主分片(Primary Shard);
  • 副本分片(Replica Shard);

有了shard分片就可以横向扩展,存储更多数据,让搜索和分析等操作分布到多台服务器上去执行,从而提升吞吐量和性能。

7.replica副本

任何一个服务器随时可能故障或宕机,此时 shard 分片可能会丢失,因此可以为每个shard 需要创建多个 replica 副本。

副本就是对分片的 Copy,每个主分片都有一个或多个副本分片,当主分片异常时,副本可以提供数据的查询等操作,保证数据不丢失。

 

ElasticSearch下载

下载地址:https://www.elastic.co/downloads/past-releases#elasticsearch

ElasticSearch教程(入门到精通万字图文详解)-mikechen

选择上面的操作系统,下载自己需要的版本即可。

 

ElasticSearch安装

ElasticSearch安装教程(手把手教你3步成功)

ElasticSearch下载后,解压后。

ElasticSearch目录结构如下:

ElasticSearch教程(入门到精通万字图文详解)-mikechen

  • bin :脚本文件,包括 ES 启动 、安装插件等等;
  • config : elasticsearch.yml(ES 配置文件)、jvm.options(JVM 配置文件)、日志配置文件等等;
  • JDK : 内置的 JDK,JAVA_VERSION=“12.0.1”;
  • lib : 类库;
  • logs : 日志文件;
  • modules : ElasticSearch所有模块等;
  • plugins : ElasticSearch已经安装的插件,默认没有插件 ,也是放ik分词器目录;
  • data : ElasticSearch启动的时候,会有该目录,用来存储文档数据。该目录可以设置;

 

ElasticSearch启动

1.进入bin目录启动

双击执行elasticsearch.bat,如下图所示:

ElasticSearch教程(入门到精通万字图文详解)-mikechen

显示start字样,说明启动成功了:

ElasticSearch教程(入门到精通万字图文详解)-mikechen

 

2.检测ElasticSearch启动成功

看到started说明启动成功,打开浏览器测试,输入地址:

http://localhost:9200:

ElasticSearch教程(入门到精通万字图文详解)-mikechen

出现以上内容,说明ElasticSearch启动成功了。

 

ElasticSearch使用示例

方式一:基于 最常用DSL 检索

Elasticsearch提供基于JSON的完整查询DSL来定义查询,比如:

GET /shirts/_search
{
  "query": {
    "bool": {
      "filter": [
        { "term": { "color": "red"   }},
        { "term": { "brand": "gucci" }}
      ]
    }
  }
}

方式二:基于 URL 检索

GET /my_index/_search?q=user:seina

方式三:类SQL 检索

POST /_sql?format=txt
{
  "query": "SELECT * FROM uint-2020-08-17 ORDER BY itemid DESC LIMIT 5"
}

 

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法