从官网视角了解ElasticeSarch

55 阅读6分钟

我正在参加「掘金·启航计划」

ElasticeSarch的概述

ElasticSearch官网

什么是ElasticSearch?

Elasticsearch 是一个分布式、RESTful 风格、基于Lucene的搜索和数据分析引擎,Elasticsearch 会集中存储您的数据,让您飞快完成搜索,微调相关性,进行强大的分析,并轻松缩放规模。

  • ElasticSearch常用作为全文检索、数据分析的工具。
  • ElasticSearch和 Elasticsearch、Kibana、Beats 和 Logstash等开源产品并称为 Elastic Stack(ELK),能够安全可靠地从任何来源获取任何格式的数据,然后对数据进行搜索、分析和可视化。
  • ElasticSearch是基于Restful WebApi,使用Java语言开发的搜索引擎库类,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。其客户端在Java、C#、PHP、Python等许多语言中都是可用的。

es_062

为什么需要学ElasticSearch?

  • ElasticSearch是一个开源搜索引擎,具有良好用户社区以及不断增长的贡献者社区。
  • 软件开发中,搜索功能是一个非常重要的功能,Elasticsearch掌握近实时的搜索和分析能力,才能刚有效管理分析数据。
  • ElasticSearch开发学习成本低,使用起来非常便捷高效。
  • 很多国内大厂都在使用,并有ElasticSearch云产品推出。

ElasticSearch的主要功能和应用场景?

ElasticSearch主要功能,官网描述如下

es_063

es_065

es_066

  1. ElasticSearch具有海量数据的分布式存储以及集群管理,达到了服务与数据的高可用以及水平扩展。
  2. ElasticSearch具有有较好的安全性,具有很好的监控管理的功能,并且兼容开发语言丰富。
  3. ElasticSearch具有近实时搜索,性能卓越。对结构化、全文、地理位置等类型数据,做到高效处理。

ElasticSearch主要应用场景,官网描述如下

es_064

  1. 日志管理与分析、安全指标监控、系统应用性能监控。
  2. 网站全文检索、大数据分析、地理空间数据可视化

ElasticSearch与Solr的对比?

Elasticsearch 和 Solr,这两款都是基于 Lucene 搭建的,可以独立部署启动的搜索引擎服务软件。由于内核相同,所以两者除了服务器安装、部署、管理、集群以外,对于数据的操作 修改、添加、保存、查询等等都十分类似。

ElasticSearch的区别

  1. ElasticSearch是分布式的,自带分布式协调管理功能,不需要其他组件。Solr则是利用Zookeeper进行分布式管理。
  2. ElasticSearch安装配置基于 JSON 较为简单,更易于上手,而Solr颗粒度具有细化的配置。
  3. Solr建立索引会产生io阻塞,查询性能较差, 搜索效率下降。实时搜索效率不高,es实时搜索效率高。
  4. ElasticSearch在数据监控和指标上更优于Solr。
  5. Solr支持更多格式的数据,比如JSON、XML、CSV,而Elasticsearch仅支持json文件格式。
  6. Solr更加适合于传统搜索应用,并且有完善的文档和示例,Elasticsearch适合实时海量数据检索。

ElasticeSarch基本概念

MYSQLElasticSearch
数据库(database)索引(index)
表(table)类型(type)6.0后舍弃
行(row)文档(document)
列(column)字段(filed)
正向索引倒排索引
SQLDSL
SELECT ...GET http://...
UPDATE ...PUT http://...
DELETEDELETE http://...

索引(Index)

  • 一个索引是一个文档的集合,每个索引有唯一的名字,通过名字来操作索引和索引下的文档。类似通过字典的目录来查询数据。

类型(Type)

  • 指在一个索引中,可以索引不同类型的文档,如用户数据、博客数据。从6.0.0 版本起已废弃,一个索引中只存放一类数据。

文档(Document)

  • 被索引的一条数据,索引的基本信息单元,以JSON格式来表示。

字段(Filed)

  • 相当于是数据表的字段,对文档数据根据不同属性进行的分类标识。

映射(Mapper)

  • mapping 是处理数据的方式和规则方面做一些限制,如:某个字段的数据类型、默认值、分析器、是否被检索等等。

分片(Shards)

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

分片很重要,主要有两方面的原因:

  • 允许你水平分割/扩展你的内容容量
  • 允许你在分片之上进行分布式的、并行的操作,进而提高性能/吞吐量

至于一个分片怎样分布,它的文档怎样聚合和搜索请求,是完全由 Elasticsearch 管理的,对于作为用户的你来说,这些都是透明的,无需过分关心。

如同完整的大数据,分割成多个小数据,分布到不同的地方,小数据就是分片,所有的分片合起来就是完整的数据

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

副本(Replicas)

一个分片可以有多个备份(副本),副本主要解决了两个问题

  • 在节点/分片挂掉的情况下,可以保证数据的访问,提供了高可用。
  • 拓展了程序的吞吐量,搜索可以在所有副本中并行运行,降低了主节点的压力。

系统架构

Elasticsearch是采用主从同步,负载均衡的架构模式。

​ 当一个节点被选举成为主节点时, 它将负责管理集群范围内的所有变更,例如增加、删除索引,或者增加、删除节点等。而主节点并不需要涉及到文档级别的变更和搜索等操作,所以当集群只拥有一个主节点的情况下,即使流量的增加它也不会成为瓶颈。任何节点都可以成为主节点。我们的示例集群就只有一个节点,所以它同时也成为了主节点。

​ 作为用户,我们可以将请求发送到集群中的任何节点,包括主节点。每个节点都知道任意文档所处的位置,并且能够将我们的请求直接转发到存储我们所需文档的节点。无论我们将请求发送到哪个节点,它都能负责从各个包含我们所需文档的节点收集回数据,并将最终结果返回給客户端。Elasticsearch 对这一切的管理都是透明的。

参考文章

www.elastic.co/cn/elastic-…

www.elastic.co/cn/elastics…

www.pdai.tech/md/db/nosql…