ElasticSearch原理+实战知识点
最新推荐文章于 2024-12-31 17:15:46 发布·2.5k 阅读
3
46·今天为大家带来流计算领域经常使用的组件 ElasticSearch,本文通过原理+实战操
教程带领大家快速学会 ElasticSearch 搜索引擎,以下内容全部经过实战操作,可
以根据文档进行学习~
大纲如下:
1 ElasticSearch 概述
1.1 全文搜索引擎
小伙伴们经常使用 google 或者百度进行搜索内容,在输入框中输入关键字,这个时候,网站会将包含 关键字 的所有网页返回,大家有没有想过,为什么输入关键字就可以查到结果呢? 同时网站上返回的页面内容大多都是一些 非结构化 的文本数据,对于大量的文本数据,肯定是不会存储到数据库中的,原因如下:
(1)非结构化文本数据,关系型数据库搜索不能很好支持全文索引扫描整张表。
(2)查询效率低下,即使对 SQL 进行大量优化,其效果也收效甚微。
(3)对于 insert 和 update 操作都会重新构建索引,维护非常麻烦。
针对上述问题,在生产环境中,面对海量的数据,若想要毫秒级查询到结构化数据或非结构化数据,我们就需要专业,健壮,强大的全文搜索引擎。
全文搜索引擎的 工作原理:计算机索引程序通过 扫描 文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户。这个过程类似于通过字典中的检索字表查字的过程
1.2 什么是 ElasticSearch ?
为了实现毫秒级的搜索效果,ElasticSearch 出现了~
ElasticSearch(弹性搜索):是一款开源的分布式、RESTful 风格的搜索和数据分析引擎,它底层基于 Apache Lucene 开源库进行封装,其不仅仅提供分布式多用户能力的全文搜索引擎,还可以被准确形容为:
1、一个分布式的实时文档存储,每个字段可以被索引与搜索;
2、一个分布式实时分析搜索引擎;
3、能胜任上百个节点的扩展,并支持 PB 级别结构化和非结构化数据。
ElasticSearch 搜索整体架构如下图所示:
1.3 ElasticSearch 基本概念
1.3.1 节点&集群
Elasticsearch 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elasticsearch 实例。单个 Elasticsearch 实例称为一个节点(Node),一组节点构成一个集群(Cluster)。
1.3.2 索引&类型&文档&字段&映射
映射关系如下图:
什么是 index (索引) ?
一个 索引 就是一个拥有几分相似特征的文档的集合。ES 将数据存储于一个或多个索引中,索引 就相当于 SQL 中的一个数据库。
什么是 Type(类型)?
类型是索引内部的逻辑分区(category/partition),然而其意义完全取决于用户需求。因此,一个索引内部可定义一个或多个类型(type)。一般来说,类型就是为那些拥有相同的域的文档做的预定义。类比传统的关系型数据库领域来说,类型 相当于 表,7.x 版本默认使用 _doc 作为 type 。
什么是 Document(文档)?
文档是 Lucene 索引和搜索的 原子单位,它是包含了一个或多个域的容器,基于 Json 格式进行表示。文档有一个或多个域组成,每个域拥有一个名字及一个或多个值,有多个值的域通常被称为 多值域,每个文档可以存储不同的域集,但同一类型下的文档至应该有某种程度上的相似之处。相当于 mysql 表中的 row 。
什么是 Field (字段)?
Field 是相当于数据库中的 Column
上述索引&类型&文档&字段结构图如下:
什么是 Mapping(映射)?
Mapping 是定义文档及其包含的字段如何存储和索引的过程。Mapping 是 ES 中的一个很重要的内容,它类似于传统关系型数据中 table 的 schema,用于定义一个索引(index)的某个类型(type)的数据结构。
1.3.3 分片&副本
什么是 Shard (分片)?
一个 索引 可以存储超出单个结点硬件限制的大量数据。比如,一个具有 10 亿文档的索引占据 1TB 的磁盘空间,而任一节点都没有这样大的磁盘空间;或者单个节点处理搜索请求,响应太慢。 为了解决这个问题,Elasticsearch 提供了将索引划分成多份的能力,这些份就叫做 分片。当你创建一个索引的时候,你可以指定你想要的 分片的数量。每个分片本身也是一个功能完善并且独立的 索引,这个 索引 可以被放置到集群中的任何节点上。 分片之所以重要,主要有两方面的原因:
- 允许你水平分割/扩展你的内容容量
- 允许你在分片(潜在地,位于多个节点上)之上进行分布式的、并行的操作,进而提高性能/吞吐量
- 一个分片怎样分布,它的文档怎样聚合回搜索请求,是完全由 Elasticsearch 管理的,对于作为用户的你来说,这些都是透明的
什么是 Replica (副本)?
副本是一个分片的精确复制,每个分片可以有零个或多个副本。副本的作用: - 提高系统的容错性,当某个节点某个分片损坏或丢失时,可以从副本中恢复。
- 提高 ES 查询效率,ES 会自动对搜索请求进行负载均衡。
2 ElasticSearch 安装部署<

最低0.47元/天 解锁文章















3471




























