ElasticSearch精要

1、什么是ElasticSearch:

    Elasticsearch 是基于 Lucene 的 Restful 的分布式实时全文搜索引擎,每个字段都被索引并可被搜 索,可以快速存储、搜索、分析海量的数据。

集群:是一个或多个服务器的集合,共同保存数据并提供所有节点的联合索引和搜索功能。集群有唯一 标志,为"ElasticSearch"。

节点:节点是属于集群一部分的单体服务器,储存有数据并参与集群索引和搜索功能。如果节点设置为 按名称加入集群,则该节点只能是集群的一部分。

索引:类似关系型数据库中的数据库,有一个定义多重类型的映射。索引是逻辑名称空间,可映射到一 个或多个主分片,并且可以有不限个数的副本分片。

文档:文档类似关系型数据库中的数据行,不同的是处在索引中的文档可以有不同的结构或字段,但是 通用字段应该具有相同的数据类型。

2、ElasticSearch 的基本概念:

(1)index 索引:索引类似于mysql 中的数据库,Elasticesearch 中的索引是存在数据的地方,包含了 一堆有相似结构的文档数据。

(2)type 类型:类型是用来定义数据结构,可以认为是 mysql 中的一张表,type 是 index 中的一个 逻辑数据分类 。

(3)document 文档:类似于 MySQL 中的一行,不同之处在于 ES 中的每个文档可以有不同的字段, 但是对于通用字段应该具有相同的数据类型,文档是es中的最小数据单元,可以认为一个文档就是一条 记录。

(4)Field 字段:Field是Elasticsearch的最小单位,一个document里面有多个field

(5)shard 分片:单台机器无法存储大量数据,es可以将一个索引中的数据切分为多个shard,分布在 多台服务器上存储。有了shard就可以横向扩展,存储更多数据,让搜索和分析等操作分布到多台服务 器上去执行,提升吞吐量和性能。

(6)replica 副本:任何服务器随时可能故障或宕机,此时 shard 可能会丢失,通过创建 replica 副 本,可以在 shard 故障时提供备用服务,保证数据不丢失,另外 replica 还可以提升搜索操作的吞吐量。

节点是指ElasticSearch的实例。

当启动Elasticsearch的实例,就会启动至少一个节点。 相同集群名的多个节点的连接就组成了一个集群,在默认情况下,集群中的每个节点都可以处理http请 求和集群节点间的数据传输,集群中所有的节点都知道集群中其他所有的节点,可以将客户端请求转发 到适当的节点。

节点有以下类型:

(master)节点:在一个节点上当node.master设置为True(默认)的时候,它有资格被选作为主节 点,控制整个集群。

数据(data)节点:在一个节点上node.data设置为True(默认)的时候。该节点保存数据和执行数据相 关的操作,如增删改查,搜索,和聚合。

客户端节点:当一个节点的node.master和node.data都设置为false的时候,它既不能保持数据也不能 成为主节点,该节点可以作为客户端节点,可以响应用户的情况,并把相关操作发送到其他节点。

主节点配置为:node.master: true node.data: false

从节点配置为:node.master: false node.data: true

3、ElasticSearch的分片:

Shard即数据分片,是ES的数据载体。在ES中数据分为primary shard(主分片)和replica shard(副本分片),每一个primary承载单个索引的一部分数据,分布于各个节点,replica为某个primary的副本,即备份。分片分配的原则是尽量均匀的分配在集群中的各个节点,以最大程度降低部分shard在出现意外时对整个集群乃至服务造成的影响。每个分片就是一个Lucene的实例,具有完整的功能。

4、ElasticSearch的分片分配策略:

ES使用数据分片(shard)来提高服务的可用性,将数据分散保存在不同的节点上以降低当单个节点发生故障时对数据完整性的影响,同时使用副本(repiica)来保证数据的完整性。关于分片的默认分配策略,在7.x之前,默认5个primary shard,每个primary shard默认分配一个replica,即5主1副,而7.x之后,默认1主1副。

ES在分配单个索引的分片时会将每个分片尽可能分配到更多的节点上。但是,实际情况取决于集群拥有的分片和索引的数量以及它们的大小,不一定总是能均匀地分布。Paimary只能在索引创建时配置数量,而replica可以在任何时间分配,并且primary支持读和写操作,而replica只支持客户端的读取操作,数据由es自动管理,从primary同步。

ES不允许Primary和它的Replica放在同一个节点中,并且同一个节点不接受完全相同的两个Replica同一个节点允许多个索引的分片同时存在。

5、text 和 keyword类型的区别:

两个类型的区别主要是分词:

keyword 类型是不会分词的,直接根据字符串内容建立倒排索引,所以 keyword类型的字段只能通过精确值搜索到;

Text 类型在存入 Elasticsearch 的时候,会先分词,然后 根据分词后的内容建立倒排索引

6、query 和 filter 的区别:

(1) query:查询操作不仅仅会进行查询,还会计算分值,用于确定相关度;

(2) filter:查询操作仅判断是否满足查询条件,不会计算任何分值,也不会关心返回的排序问题,同 时,filter 查询的结果可以被缓存,提高性能。

7、倒排索引过程:

倒排索引是区别于正排索引的概念: 正排索引:是以文档对象的唯一 ID 作为索引,以文档内容作为记录。 倒排索引:Inverted index,指的是将文档内容中的单词作为索引,将包含该词的文档 ID 作为记录。

倒排索引的生成过程

下面通过一个例子来说明下倒排索引的生成过程。

假设目前有以下两个文档内容: 苏州街维亚大厦 桔子酒店苏州街店 其处理步骤如下:

  • 正排索引给每个文档进行编号,作为其唯一的标识。

  • 生成倒排索引。

首先要对字段的内容进行分词,分词就是将一段连续的文本按照语义拆分为多个单词,这里两个文 档包含的关键词有:苏州街、维亚大厦… 然后按照单词来作为索引,对应的文档 id 建立一个链表,就能构成上述的倒排索引结构。

有了倒排索引,能快速、灵活地实现各类搜索需求。整个搜索过程中我们不需要做任何文本的模糊匹配。

倒排索引的结构根据倒排索引的概念,我们可以用一个 Map来简单描述这个结构。这个 Map 的 Key 的即是分词后的 单词,这里的单词称为 Term,这一系列的 Term 组成了倒排索引的第一个部分 —— Term Dictionary (索引表,可简称为 Dictionary)。 倒排索引的另一部分为 Postings List(记录表),也对应上述 Map 结构的 Value 部分集合。 记录表由所有的 Term 对应的数据(Postings) 组成,它不仅仅为文档 id 信息,可能包含以下信息:

文档 id(DocId, Document Id),包含单词的所有文档唯一 id,用于去正排索引中查询原始数 据。

词频(TF,Term Frequency),记录 Term 在每篇文档中出现的次数,用于后续相关性算分。

位置(Position),记录 Term 在每篇文档中的分词位置(多个),用于做词语搜索(Phrase Query)。

偏移(Offset),记录 Term 在每篇文档的开始和结束位置,用于高亮显示等。

8、Elasticsearch是如何实现master选举的?

Elasticsearch 的选主是 ZenDiscovery 模块负责的,主要包含 Ping(节点之间通过这个 RPC 来发 现彼此)和 Unicast(单播模块包含一个主机列表以控制哪些节点需要 ping 通)这两部分 对所有可以成为 master 的节点(node.master: true)根据 nodeId 字典排序,每次选举每个节 点都把自己所知道节点排一次序,然后选出第一个(第 0 位)节点,暂且认为它是 master 节 点。 如果对某个节点的投票数达到一定的值(可以成为 master 节点数 n/2+1)并且该节点自己也选 举自己,那这个节点就是 master。否则重新选举一直到满足上述条件。 master 节点的职责主要包括集群、节点和索引的管理,不负责文档级别的管理;data 节点可以 关闭 http功能。

9、详细描述一下Elasticsearch索引文档的过程。

首先客户端向集群发出索引文档的请求,它会选择任何一个节点,这个节点当接收到请求后会根据路由算法找到应该放的那个主分片的位置,从而索引数据。

这个节点当接收到请求后会

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大道之简

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

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

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

打赏作者

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

抵扣说明:

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

余额充值