Elastic search基础

1.es存储的基本单位

​ es存储的基本单位是索引。

// ES
index -> type -> mapping -> document -> field

//MySQL or PostgreSQL
database -> table -> table structure -> data -> table field

这里将ES的基本术语和数据库做了一个关联,仅个人学习时的理解。

2.es的基本架构设计

​ 一个index(索引)会被分割成多个shard(分片),每个shard都存储了该index下的部分数据。这样存储有2个好处。支持横向扩展,只需要将shard数量增加即可;性能较高,所有的查询操作都会在多个机器上运行,提升了稳定性。

集群

​ 每个shard是有多个备份的。有主分片(primary shard)和副本分片(replica shard),主分片用来执行写操作,副本分片在主分片写入完成之后同步其数据。如果某个机器停机了,其他分片的数据还是完整的。

​ es 集群多个节点,会自动选举一个节点为 master 节点,这个 master 节点其实就是干一些管理的工作的,比如维护索引元数据、负责切换 primary shard 和 replica shard 身份等。

​ master 节点宕机了,那么会重新选举一个节点为 master 节点。

​ 非 master节点宕机了,那么会由 master 节点,让那个宕机节点上的 primary shard 的身份转移到其他机器上的 replica shard。接着你要是修复了那个宕机机器,重启了之后,master 节点会控制将缺失的 replica shard 分配过去,同步后续修改的数据之类的,让集群恢复正常。

3.es读写数据的基本原理

写数据

1.客户端选择一个协调节点(coordinating node)发送请求;

2.由coordinating node对document进行路由,将请求转发给对应的primary shard node

3.执行写操作,同时同步数据至replica shard node

4.主从节点都写入完成后,响应给客户端。

es-write

写数据底层原理

**注:**es是准实时。默认是写入数据1秒之后才可以被看到,因为其默认1s执行一次refresh操作。

1.数据先写入buffer;

2.每隔1s刷新写入至os cache(数据进入到os cache就可以被搜索到);

3.每隔5s将os cache写入到translog文件中(如果机器在写入translog之前宕机,最多会丢失5秒的数据);

4.translog数据大到一定程度或者默认每隔30分钟,会触发一次commit操作,将缓冲区的数据都flush到segement file磁盘文件中。
在这里插入图片描述

读数据

1.发请求至任意一个coordinating node。

2.由coordinating node 对document id进行hash路由,将请求转发到对应的node上,会使用随机轮询算法在primary shard和replica shard中随机选一个,执行读操作。

3.接收所有node返回的document给 coordinating code,协调节点负责将数据进行合并、分页、排序等操作。

4.返回结果给客户端。

删除/更新数据

如果是删除操作,commit的时候会生成一个.del文件,将doc标记为delete状态。在执行搜索时根据.del就可以判断出doc是否被删除。

如果是更新操作,会把之前的doc标记为delete状态,重新写入数据。

buffer每隔1秒进行refresh操作,则默认是每一秒生成一个segement file,当这个文件增加到一定程度,会触发merge操作,同时把.del文件删除,将新的segement file写入磁盘,同时替换掉之前的文件。

4.什么是倒排索引

在搜索引擎中,每个文档都有一个对应的文档 ID,文档内容被表示为一系列关键词的集合。例如,文档 1 经过分词,提取了 20 个关键词,每个关键词都会记录它在文档中出现的次数和出现位置。

那么,倒排索引就是关键词到文档 ID 的映射,每个关键词都对应着一系列的文件,这些文件中都出现了关键词。

有以下文档:

DocIdDoc
1谷歌地图之父跳槽 Facebook
2谷歌地图之父加盟 Facebook
3谷歌地图创始人拉斯离开谷歌加盟 Facebook
4谷歌地图之父跳槽 Facebook 与 Wave 项目取消有关
5谷歌地图之父拉斯加盟社交网站 Facebook

对文档进行分词之后,得到以下倒排索引(未进行严格的升序排列)。

WordIdWordDocIds
1谷歌1,2,3,4,5
2地图1,2,3,4,5
3之父1,2,4,5
4跳槽1,4
5Facebook1,2,3,4,5
6加盟2,3,5
7创始人3
8拉斯3,5
9离开3
104

另外,实用的倒排索引还可以记录更多的信息,比如文档频率信息,表示在文档集合中有多少个文档包含某个单词。

那么,有了倒排索引,搜索引擎可以很方便地响应用户的查询。比如用户输入查询 Facebook,搜索系统查找倒排索引,从中读出包含这个单词的文档,这些文档就是提供给用户展示的搜索结果。

要注意倒排索引的两个重要细节:

  • 倒排索引中的所有词项对应一个或多个文档;
  • 倒排索引中的词项根据字典顺序升序排列
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值