ElasticSearch基本介绍

Elasticsearch 是什么

ElasticSearch是一个开源搜索与分析引擎,ElasticSearch是一个天然分布式搜索与分析引擎,适用包括文本、数字、地理空间、结构化和非结构化数据,ElasticSearch在Apache Lucene的基础上开发而成,由Elastic于2010首次发布,ElasticSearch支持REST风格API,分布式特性,速度可可扩展性而闻名,Elastic Stack的核心组件,Elastic Stack是适用于数据采集,充实,存储,分析,和可视化的一组开源工具,通常称Elastic Stack为ELK Stack 代指三大件(ElasticSearch,Logstash,Kibana),目前Elastic Stack包括一些列分布的轻量级数据采集代理,这些代理统称为Beats,可以用来先ElasticSearch发送数据。对,这些全部来自于官网,不造谣,不传谣,秉承着一切以官网为客观事实!不信你看,你往下看!
ElasticSearch基本介绍_第1张图片
在实际开发中,全文检索时最常见的需求,那么开源的ElasticSearch就是目前的首选,ElasticSearch底层开源库Lucene,ELastic是Lucene的封装,提供了REST API接口操作,开箱即用。
由于知道你们不喜欢看官网,那我就替你们把官网抄下来吧!ElasticSearch官网

ElasticSearch的用途

感觉这玩意和数据库差不多,也就是存数据,查数据,不就和MySQL差不多么?当然不是,在中间件这块,我们还是要选择对应的服务,MySQL专注于数据的持久化存储,管理,也就是CURD,但是真正做海量数据的检索,分析,那么ElasticSearch更加在行。可以秒级别的检索出我们需要的数据,如果MySQL单表达到百万级别的数据,那么检索起来是比较慢的。Elasticsearch 在速度和可扩展性方面都表现出色,而且还能够索引多种类型的内容,这意味着其可用于多种用例:

  • 应用程序搜索
  • 网站搜索
  • 企业搜索
  • 日志处理和分析
  • 基础设施指标和容器监测
  • 应用程序性能监测
  • 地理空间数据分析和可视化
  • 安全分析
  • 业务分析

核心概念

index(索引)
对比MySQL中的操作就是insert插入一条数据,而ElasticSearch中称为索引一条数据,ElasticSearch索引对比MySQL中又类似于DataBase,例如我们可以在MySQL中创建一个数据库,数据库中有若干个表,那么ElasticSearch中则是创建一个索引,索引中有若干个Type!

Type类型
我们在ElasticSearch中存储数据时,是将数据存储在ElasticSearch中某个索引下的某个类型中的,对比MySQL的话就是我们将数据存储在MySQL某个库中的某个表中。在索引中可以定义多个Type。
document文档
保存在ElasticSearch某个索引下的某个类型中的数据我们称为一个文档,文档的数据格式是JSON,类似于MySQL中某个数据库下某个表中的一条记录,是同一个意思!
其他
ElasticSearch基本介绍_第2张图片
为什么上面只单独介绍了Index、Type,Document,是因为早期版本中设计是如上图的,可是这种设计概念违背了全文检索的原则和基本实现,索引在关系型数据库(MySQL中)中是为了优化查询所设计的,MySQL中没有索引也能查询数据,只不过是会慢,ElasticSearch是专门为了检索数据,所以索引是整个ElasticSearch中的核心关键,在搜索引擎中,万物皆索引不为过,就如Java万物皆对象,ElasticSearch为了快速检索数据,使用了一个特殊的概念进行数据的存储和查询,我们称之为倒排索引,这个下文会讲!这里的Type概念在后期版本中慢慢弱化,ElasticSearch6.X中一个index下只能包含一个Type,ElasticSearch7.X中Type的概念已经被删除! 那么在后续使用中一定要注意各版本的变化!
简单理解为index对应的是MySQL中的库,Type对应MySQL中的表!document对应MySQL中的记录

Mapping映射
这里面不单是只有简单概念,还涉及到一些操作,这里单独拎出来做一篇文章Elasticsearch-Mapping映射操作

分片
分片式ElasticSearch最小单元,一个索引可以存储超出单个节点硬件限制的大量数据。比如,一个具有10亿文档数据的索引占据1TB的磁盘空间,而任一节点都可能没有这样大的磁盘空间。或者单个节点处理搜索请求,响应太慢。为了解决这个问题, Elaticsearch提供了将索引划分成多份的能力,每一份就称之为分片。当你创建一个索引的时候,你可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的"索引”,这个"索引”可以被放置到集群中的任何节点上。 分片很重要主要原因如下:

  • 允许你水平分割/扩展你的内容容量。
  • 允许你在分片之上进行分布式的、并行的操作,进而提高性能/吞吐量。(例如我们将数据分片存储,那么我们检索数据的时候就可以根据不同的分片进行检索) 至于一个分片怎样分布,它的文档怎样聚合和搜索请求,是完全由Elasticsearch管理的,对于作为用户的你来说,这些都是透明的, 无须过分关心

被混淆的概念是,一个Lucene索引我们在Elasticsearch称作分片。一个Elastiesearch索引是分片的集合。当Elasticsearch在索引中搜索的时候, 他发送查询到每一个属于索引的分片(Lucene索引),然后合并每个分片的结果到一个全局的结果集。

副本
在一个网络/云的环境里,失败随时都可能发生,在某个分片/节点不知怎么的就处于离线状态,或者由于任何原因消失了,这种情况下,有一个故障转移机制是非常有用并且是强烈推荐的。为此目的, Elastigsearch允许你创建分片的一份或多份拷贝,这些拷贝叫做复制分片(副本)。 复制分片之所以重要,有两个主要原因如下:

  • 在分片/节点失败的情况下,提供了高可用性。因为这个原因,注意到复制分片从不与原/主要(originalprimary)分片置于同一节点上是非常重要的。
  • 扩展你的搜索量/吞吐量,因为搜索可以在所有的副本上并行运行。

分配
将分片分配给某个节点的过程,包括分配主分片或者副本。如果是副本,还包含从主分片复制数据的过程。这个过程是由master节点完成的。

ElasticSearch如何快速检索数据

在MySQL中我们是如何提高数据查询的效率的,这个就来自于给MySQL建立索引,关于这块可以可以简单看看MySQL高新能索引,当然ElasticSearch也是使用索引,索引又分为正向索引和倒排索引,通常MySQL就是正向索引的典型案例!
ElasticSearch索引
Elasticsearch 索引指相互关联的文档集合。Elasticsearch 会以 JSON 文档的形式存储数据。每个文档都会在一组键(字段或属性的名称)和它们对应的值(字符串、数字、布尔值、日期、数值组、地理位置或其他类型的数据)之间建立联系。Elasticsearch 使用的是一种名为倒排索引的数据结构,这一结构的设计可以允许十分快速地进行全文本搜索。倒排索引会列出在所有文档中出现的每个特有词汇,并且可以找到包含每个词汇的全部文档。在索引过程中,Elasticsearch 会存储文档并构建倒排索引,这样用户便可以近实时地对文档数据进行搜索。索引过程是在索引 API 中启动的,通过此 API 您既可向特定索引中添加 JSON 文档,也可更改特定索引中的 JSON 文档。当然还有一点不能忽略,ElasticSearch默认是将数据存放在内存中,这也是ElasticSearch快的一个原因!

正向索引
以数据记录的id,或者其他字段,如name作为搜索条件,通过匹配id或者那么列得到全部记录的操作称为正向索引,这种组织方式在建立索引结构比较简单,易于维护,但是在大文本检索的时候效率太低,所以这就诞生了反向索引的概念!

倒排索引
ElasticSearch使用一种称为倒排索引的结构,它适用于快速的全文检索,ElasticSearch是建立在全文搜索引擎库Lucene的基础上的搜索引擎,ElasticSearch隐藏了Lucene的复杂性,取而代之的是提供了一套简单易用的API来进行操作的,底层还是操作的Lucene,因为ElasticSearch底层的倒排索引就是Lucene的倒排索引。

  1. 反向索引,一般也被称为倒排索引
  2. 倒排索引以字或者关键字进行索引,表中关键字对应的记录表项记录了出现这个字或者词所有的文档
  3. 一个表项就是一个字段,它记录了该文档的ID和字符在该文档的位置情况

优点: 查询的时候由于可以一次得到查询关键字所对应的所有文档,所以查询效率高于正向索引
缺点: 由于每个字或词对应的文档数量在动态变化,所以倒排索引表的建立好维护都较为复杂

说白了正向索引就是根据id找数据,反向索引就是根据数据找id 关于ElasticSearch中倒排索引是如何工作的请看往期文章ElasticSearch倒排索引

其他相关

一下文章可以放心大胆看,这些都是我的个人文章,有什么问题欢迎在对应文章下评论,虽然我不一定看。哈哈哈。开个玩笑!
搭建
Docker搭建ElasticSearch
Linux安装ElasticSearch
Windows安装ElasticSearch
Kubesphere搭建ElasticSearch
Windows搭建ElasticSearch集群
Linux搭建ElasticSearch集群

可视化工具
Elasticsearch数据可视化工具Kibana(Win/Linux)安装
Elasticsearch数据可视化工具elasticsearch-head安装
PostMan使用REST Full操作ElasticSearch

ElasticSearch插件
Elasticsearch-IK分词器自定义词库
Elasticsearch-分词器操作

语法使用
Elasticsearch语法详情
Elasticsearch-检索
Elasticsearch-Mapping映射操作
Elasticsearch-Aggregations聚合数据分析

JAVA整合ElasticSearch
SpringBoot整合Elasticsearch-elasticsearch-rest-high-level-client
SpringBoot整合ElasticSearch-SpringData

报错
kibana连接ElasticSeatch报错
Java连接ElasticSearch报错

ElasticSearch进阶
ElasticSearch集群系统架构
ElasticSearch分布式集群
ElasticSearch集群数据读写流程
ELasticSearch优化
ElasticSearch进阶
ElasticSearch面试题

ELK
ELK搭建
ELK架构介绍
ElasticSearch搭建
Kibana搭建
ElasticSearch-head搭建
Logstash搭建
Kafka搭建
Kafka-manager搭建
Filebeat搭建

其他
SkyWalking持久化ElasticSearch

你可能感兴趣的:(#,ElasticSearch,elasticsearch)