ES常见问题汇总
1.Es的作用(elasticsearch)
作用:
elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容
ELK技术栈
elasticsearch结合kibana、Logstash,也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监控等领域
分工
2.Es的基本术语
索引(index):相当于mysql的数据库 – 也可以认为是表,因为doc_type被淡化了
类型(doc_type):相当于mysql的表 – 被淡化了
文档(document):相当于mysql的行
节点(node):一般指安装es的服务器
分片(primary shard):一个节点有多个分片组成
副本(replica shard):一个分片有多个备份,备份就是副本
段(segment):一个分片是由多个段组成
3.Es倒排索引原理
3.1正向索引
正向索引是最传统的,根据id索引的方式。但根据词条查询时,必须先逐条获取每个文档,然后判断文档中是否包含所需要的词条,是根据文档找词条的过程。
id | name | price |
---|---|---|
1 | 小米手机 | 6000 |
2 | 三星手机 | 2999 |
3 | 三星小米充电器 | 2600 |
4 | 小米手环 | 3600 |
3.2倒排索引
倒排索引则相反,是先找到用户要搜索的词条,根据词条得包含词条的文档的id,然后根据id获取文档。是根据词条找文档的过程。
创建倒排索引是对正向索引的一种特殊处理,流程如下:
- 将每一个文档的数据利用算法分词,得到一个个词条
- 创建表,每行数据包括词条、词条所在文档id信息
词条 | 文档id |
---|---|
小米 | 1,3,4 |
手机 | 1,2 |
三星 | 2,3 |
充电器 | 3 |
手环 | 4 |
流程
虽然要先查询倒排索引,再查询正排索引,但是无论是词条、还是文档id都建立了索引,查询速度非常快!无需全表扫描。
是不是说,我们学习了elasticsearch就不再需要mysql了呢?
并不是如此,两者各自有自己的擅长支出:
- Mysql:擅长事务类型操作,可以确保数据的安全和一致性
- Elasticsearch:擅长海量数据的搜索、分析、计算
因此在企业中,往往是两者结合使用:
- 对安全性要求较高的写操作,使用mysql实现
- 对查询性能要求较高的搜索需求,使用elasticsearch实现
- 两者再基于某种方式,实现数据的同步,保证一致性
4.Es的近实时
5.Es的写入流程
6.Es的搜索流程
query查询阶段
fetch读取阶段
7Es分页
1、常见的分页方式:from+size
elasticsearch默认采用的分页方式是from+size的形式,但是在深度分页的情况下,这种使用方式的效率是非常低的,比如from=5000,size=10,如果有10个分片,es需要在各个分片上匹配排序并得到5010*10条有效数据,然后在协调节点中排序前5000条获取后10条数据返回即可。除了会遇到效率上的问题,还有一个无法解决的问题是es目前支持最大的skip值是max_result_window默认为10000,也就是说当from+size > max_result_window时,es将返回错误。
解决方案:
问题描述:比如当客户线上的es数据出现问题,当分页到几百页的时候,es无法返回数据,此时为了恢复正常使用,我们可以采用紧急规避的方式,就是将max_result_window的值调至50000。
2、scroll方式
为了满足深度分页的场景,es提供了scroll的方式进行分页读取。原理上是对某次查询生成一个游标scroll_id,后续的查询只需要根据这个游标去取数据,直到结果集中返回的hits字段为空,就表示遍历结束。Scroll的作用不是用于实时查询数据,因为它会对es做多次请求,不可能做到实时查询。它的主要作用是用来查询大量数据或全部数据。
使用scroll,每次只能获取一页的内容,然后会返回一个scroll_id。根据返回的这个scroll_id可以不断地获取下一页的内容,所以scroll并不适用于有跳页的情景
下面是springboot,springCloudalibaba等免费视频地址,有兴趣可以关注一下
<!-- springboot,springboot整合redis,整合rocketmq视频: -->
https://www.bilibili.com/video/BV1nkmRYSErk/?vd_source=14d27ec13a4737c281b7c79463687112
<!-- springcloudalibaba,openfeign,nacos,gateway,sso视频:-->
https://www.bilibili.com/video/BV1cFDEYWEkY/?vd_source=14d27ec13a4737c281b7c79463687112
<!-- vue+springboot前后端分离视频:-->
https://www.bilibili.com/video/BV1JLSEYJETc/?vd_source=14d27ec13a4737c281b7c79463687112
<!-- shiro视频:-->
https://www.bilibili.com/video/BV1YVUmYJEPi/?vd_source=14d27ec13a4737c281b7c79463687112