【es学习】

1. 倒排索引

每条数据都是一个文档,对文档内容进行分词,得到多个词项term,构建term与文档id的索引表如下:
在这里插入图片描述

这种表格中,查找指定term时需要o(n)遍历,所以按照字典序排序,二分查找指定tern

词项叫作term dictionary,词项对应的列表叫作posting list,他们两个组成的结构就叫作倒排索引

在这里插入图片描述
term dictionary太多了,利用前缀树的思想进一步优化其存储、构建一颗目录树(目录树的节点存放这些词项在磁盘中的偏移量),体积小,可以放进内存中,这就是term index,加速了搜索:
在这里插入图片描述
这样可以通过term index快速获取词项在term dictionary中的大概位置,然后再通过少量检索定位到词项即可

2. stored fields 用于存储文档信息

到此为止实现了查找功能,但是我们现在拿到的是文档的id,需要将完整的文档返回给用户

这些文档就是存储在stored fields中,是个行式存储结构

3. doc values 用于排序和聚合

场景:用户需要对文档进行排序,原始做法是先筛选出符合条件的文档,再根据文档中的指定字段进行排序
doc values可以加速这个功能(空间换时间):将待排序的字段集中存放,需要用到的时候再重新排序。这种列式存储结构就是doc values

4. segment 具备完整搜索功能的最小单元

在这里插入图片描述

5. lucene单机文本搜索库

一批文档组成上面一个segment,新来的文档如果想加入,那么旧segment就要修改四个组件中的好多内容,太麻烦了
所以新来的一批文档会写入新的segment中

多个segment也会定期进行合并,这就构成了一个最简单的单机文本检索库 lucene

es就是在此基础上,提供了高性能、高可用

6. 从lucene到es:高性能 高扩展性 高可用

高性能

分为多个索引名,每个索引分shard,每个shard是一个独立的lucene库,将读写操作分到多个shard中去

高扩展性

不同shard分到多台机子上

在这里插入图片描述
高可用

给每个分片多加几个副本,分为primary shard & replica shard 主分片和副本分片,主分片同步数据给副本,副本提供读操作,主挂了它顶上

7. node角色分化

如果每个节点都具备这些能力,比较冗余
在这里插入图片描述
集群小或者压力不大的时候可以一个节点身兼数职

选主过程:去中心化
node之间互相同步数据,让所有node看到的集群数据状态都是一致的
这样集群中所有节点都能参与选主过程,也能知道集群中某个node是不是挂了

8. es写入流程

客户端请求过来发送到协调节点,协调节点通过hash路由判断数据应当写入到哪个数据节点里的哪个shard分片(注意是主分片),分片底层是lucene,所以这一步是写入到lucene中的segment内,将数据固化为倒排索引、stored fields、doc values等多种结构。
主分片写完后同步给副本分片,副本也写完后会响应给协调节点一个ack

9. es搜索流程

index name就是你的索引叫啥名

两个阶段:
1.query phrase

请求发到协调节点,协调节点根据index name信息查询有几个shard分片,这些shard分片分布在哪些节点上,将请求转发到这些node的shard上,到这里底层就是lucene了,lucene底层并发搜索多个segment,利用每个segment内部的倒排索引获取到文档id,并结合doc values获得排序信息。
分片将结果聚合返回(文档id)给协调节点,协调节点再聚合一次(文档id)

2.fetch phrase

协调节点再次拿着文档id请求数据节点中的shard,shard底层的lucene库会从segment中的stored fields中读取完整的文档信息并返回给协调节点,协调节点再返回给客户端

10. 倒排索引涉及的数据结构

参考

FOR:压缩posting list,用差分数组的思想降低存储所需空间 参考

RBM:参考

11. scroll

scroll使用:适合那种需要一次性或分批拉出大量数据做离线处理、迁移等。可以提升点效率。

设置scroll有效期,表示需要保持搜索的上下文环境多久

如果把 From + size 和 search_after 两种请求看做近实时的请求处理方式,那么 scroll 滚动遍历查询显然是非实时的。数据量大的时候,响应时间可能会比较长。

Scroll 和 PIT(Point in Time)是 Elasticsearch 中两个不同的概念,它们在一定程度上可以关联起来,但是有着不同的作用和用途。

scroll用于滚动搜索全量数据:参考

pit用于支持一段时间内的数据一致性,es7.10之后才支持:参考

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!关于学习Elasticsearch,我可以给你一些指导。Elasticsearch是一个开源的分布式搜索和分析引擎,主要用于快速、实时地存储、搜索和分析大量数据。下面是一些学习Elasticsearch的步骤: 1. 了解基本概念:开始学习Elasticsearch之前,你需要了解一些基本的概念,比如索引(index)、类型(type)、文档(document)、字段(field)等。这将帮助你更好地理解Elasticsearch的工作原理。 2. 安装和配置:根据你的操作系统,你可以从Elasticsearch官方网站下载并安装合适的版本。安装完成后,你需要进行适当的配置,如设置集群名称、分配内存等。 3. 学习REST API:Elasticsearch提供了丰富的REST API,用于与其进行交互。了解如何使用这些API来索引、搜索和删除数据是学习Elasticsearch的重要一步。 4. 索引和搜索数据:学习如何创建索引、添加文档以及执行搜索操作是使用Elasticsearch的关键。掌握查询语法、过滤器、聚合操作等功能可以帮助你更有效地使用Elasticsearch。 5. 数据建模和分析:学习如何设计合适的数据模型和映射,以及如何使用Elasticsearch进行数据分析和可视化是提高你的技能的重要一步。 6. 扩展和优化:学习如何在生产环境中扩展和优化Elasticsearch集群是非常重要的。了解如何分片、复制、调优性能等将帮助你更好地管理和维护你的数据。 7. 学习资源:除了官方文档,还有很多优秀的学习资源可供参考,如书籍、教程和在线课程等。利用这些资源可以更系统地学习和掌握Elasticsearch。 希望这些步骤能对你学习Elasticsearch有所帮助!如果有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值