【Elasticsearch】Elasticsearch 从入门到精通(一):基本介绍

Elasticsearch 从入门到精通》共包含以下 2 2 2 篇文章:

😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 💖💖💖 将激励 🔥 博主输出更多优质内容!!!

在这里插入图片描述

1.Elasticsearch

Elasticsearch 是一个基于 Apache Lucene 的 开源搜索引擎。无论在开源还是专有领域,Lucene 可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。

特点:

  • 分布式的实时文件存储,每个字段都被索引并可被搜索
  • 分布式的实时分析搜索引擎 —— 做不规则查询
  • 可以扩展到上百台服务器,处理 PB 级结构化或非结构化数据

Elasticsearch 也使用 Java 开发,并使用 Lucene 作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTful API 来隐藏 Lucene 的复杂性,从而让全文搜索变得简单。

ES 能做什么?

  • 全文检索(全部字段)
  • 模糊查询(搜索)
  • 数据分析(提供分析语法,例如聚合)

2.Elasticsearch 使用案例

  • 2013 年初,GitHub 抛弃了 Solr,采取 Elasticsearch 来做 PB 级的搜索。“GitHub 使用 Elasticsearch 搜索 20TB 的数据,包括 13 亿文件和 1300 亿行代码”。
  • 维基百科:启动以 Elasticsearch 为基础的核心搜索架构。
  • 百度:百度目前广泛使用 Elasticsearch 作为文本数据分析,采集百度所有服务器上的各类指标数据及用户自定义数据,通过对各种数据进行多维分析展示,辅助定位分析实例异常或业务层面异常。目前覆盖百度内部 20 多个业务线(包括 casio、云分析、网盟、预测、文库、直达号、钱包、风控等),单集群最大 100 台机。
  • 新浪 使用 ES 分析处理 32 亿条实时日志。
  • 阿里 使用 ES 构建挖财自己的日志采集和分析体系。

3.Elasticsearch 对比 Solr

  • Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能。
  • Solr 支持更多格式的数据,而 Elasticsearch 仅支持 json 文件格式。
  • Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供。
  • Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch。

4.Elasticsearch 基本概念及架构

在这里插入图片描述

4.1 Elasticsearch 基本概念

4.1.1 索引 index

  • 一个 索引 就是一个拥有几分相似特征的 文档的集合。比如说,可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。
  • 一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。
  • 在一个集群中,可以定义任意多的索引。
  • 索引可以看作数据库中的一个表,它包含了一组具有相似结构的文档。

4.1.2 映射 mapping

  • Elasticsearch 中的 映射(Mapping)用来定义一个文档。
  • 映射类似于关系型数据库中的 Schema,可以近似地理解为 “表结构”。
  • Mapping 是处理数据的方式和规则方面做一些限制,如某个字段的数据类型、默认值、分析器、是否被索引等等,这些都是映射里面可以设置的。

4.1.3 字段 Field

  • 相当于是数据表的 字段,对文档数据根据不同属性进行的分类标识。
  • 字段是 Elasticsearch 中最小的单个数据单元,类似于关系型数据库表中的字段。

4.1.4 类型 Type

  • 每一个字段都应该有一个对应的 类型,例如:Text、Keyword、Byte 等。

4.1.5 文档 document

一个 文档 是一个可被索引的基础信息单元。比如,可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以 JSON(Javascript Object Notation)格式来表示,而 JSON 是一个到处存在的互联网数据交互格式。

关系型数据库将数据以 元组 为单位存储在 数据库表 中,而 Elasticsearch 将数据以 文档 为单位存储在 索引 中。

4.1.6 集群 cluster

  • 一个 集群 就是由一个或多个节点组织在一起,它们共同持有整个的数据,并一起提供索引和搜索功能。
  • 一个集群由一个 唯一的名字标识,这个名字默认就是 elasticsearch
  • 这个名字是重要的,因为一个节点只能通过指定某个集群的名字,来加入这个集群。

4.1.7 节点 node

  • 一个 节点 是集群中的一个服务器,作为集群的一部分,它存储数据,参与集群的索引和搜索功能。
  • 一个节点可以通过配置集群名称的方式来加入一个指定的集群。默认情况下,每个节点都会被安排加入到一个叫做 elasticsearch 的集群中。
  • 这意味着,如果在网络中启动了若干个节点,并假定它们能够相互发现彼此,它们将会自动地形成并加入到一个叫做 elasticsearch 的集群中。
  • 在一个集群里,可以拥有任意多个节点。而且,如果当前网络中没有运行任何 Elasticsearch 节点,这时启动一个节点,会默认创建并加入一个叫做 elasticsearch 的集群。

4.1.8 分片和副本 shards & replicas

在这里插入图片描述

4.1.8.1 分片
  • 一个索引可以存储超出单个结点硬件限制的大量数据。比如,一个具有 10 亿文档的索引占据 1TB 的磁盘空间,而任一节点都没有这样大的磁盘空间;或者单个节点处理搜索请求,响应太慢。
  • 为了解决这个问题,Elasticsearch 提供了将索引划分成多份的能力,这些份就叫做 分片
  • 当创建一个索引的时候,可以指定你想要的 分片的数量
  • 分片将包含索引数据的一个子集,每个分片本身也是一个 功能完善 并且 独立 的 “索引”,这个 “索引” 可以被放置到集群中的任何节点上。
  • 分片很重要,主要有两方面的原因:
    • 允许水平分割 / 扩展你的内容容量。
    • 允许在分片之上进行分布式的、并行的操作,进而提高性能 / 吞吐量。
  • 至于一个分片怎样分布,它的文档怎样聚合回搜索请求,是完全由 Elasticsearch 管理的,对于作为用户来说,这些都是透明的。
4.1.8.2 副本
  • 在一个网络 / 云的环境里,失败随时都可能发生,在某个分片 / 节点不知怎么的就处于离线状态,或者由于任何原因消失了,这种情况下,有一个故障转移机制是非常有用并且是强烈推荐的。为此目的,Elasticsearch 允许你创建分片的一份或多份拷贝,这些拷贝叫做 副本分片,或者直接叫 副本
  • 副本之所以重要,有两个主要原因:
    • 在分片 / 节点失败的情况下,提供了高可用性。注意到副本分片从不与原 / 主要(original / primary)分片置于同一节点上是非常重要的。
    • 扩展搜索量 / 吞吐量,因为搜索可以在所有的副本上并行运行。
  • 每个索引可以被分成多个分片。一个索引有 0 个或者多个副本。
  • 一旦设置了副本,每个索引就有了 主分片副本分片,分片和副本的数量可以在索引创建的时候指定。
  • 在索引创建之后,可以在任何时候动态地 改变副本的数量,但是 不能改变分片的数量

4.2 Elasticsearch 基本架构

在这里插入图片描述

  • Gateway 是 ES 用来存储索引的文件系统,支持多种类型。
  • Gateway 的上层是一个分布式的 Lucene 框架
  • Lucene 之上是 ES 的模块,包括:索引模块搜索模块映射解析模块 等。
  • ES 模块之上是 Discovery、Scripting 和第三方插件。
    • Discovery 是 ES 的节点发现模块,不同机器上的 ES 节点要组成集群需要进行消息通信,集群内部需要选举 master 节点,这些工作都是由 Discovery 模块完成。支持多种发现机制,如 Zen 、EC2、gce、Azure。
    • Scripting 用来支持在查询语句中插入 Javascript、Python 等脚本语言,Scripting 模块负责解析这些脚本,使用脚本语句性能稍低。ES 也支持多种第三方插件。
  • 再上层是 ES 的 传输模块JMX。传输模块支持多种传输协议,如 Thrift、Memecached、HTTP,默认使用 HTTP。JMX 是 Java 的管理框架,用来管理 ES 应用。
  • 最上层是 ES 提供给用户的 接口,可以通过 RESTful 接口和 ES 集群进行交互。
  • 31
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

G皮T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值