ElasticSearch面试题

1.介绍下es的架构?

es采用的是分布式的架构,es集群中会有多个结点,而结点的角色主要有下面几种。

协调结点:

请求路由能力,将请求内容将请求转发给对应的结点进行处理。

master结点:
结点管理:处理结点的加入和离开

索引管理:负责索引的创建,删除,修改。以及索引分片的分配任务。

数据结点:

数据的存储和管理。管理包括处理数据的新增,修改,查询等请求。

2. 介绍下es的查询过程的相关知识? 

es的查询过程分两段,先query,再fetch。

在query阶段,有协调结点向数据结点发出查询指令,数据结点会返回匹配的id和排序权重

在fetch阶段,协调结点会根据排序权重重新排序,确定当前查询需要返回的数据范围。再去数据结点fetch具体的数据。

es内部如何使用缓存来优化查询数据?

解答这个问题,需要先了解es中索引的结构。首先,es的索引类似于mysql中的表,是用来存储文档数据的。基于分布式的特点,es将一个索引划分成多个分片,来提高索引的读写性能。然后,分片中的数据又是由一个个的segment构成的。

那基于索引,分片,segment这样的结构,es中存在segment级别的缓存和分片级别的缓存,来提高查询的检索速度。

其中作为数据存放的基本单元,segment在生成之后,除了合并和删除的场景,其它情况是不会变更的。对索引中文档的修改操作,都是会存在新的segment中。查询的时候,对与不同segment中包含同样id的文档的情况,也是会优先展示更新的版本号的记录。segment上的数据比较稳定,也是适合使用缓存的。

两个缓存的失效时机:

segment级别缓存:发生在segment的合并和删除的时候。

分片级别的缓存:进行refresh,操作时,缓存会失效。或者说时超过了缓存时间(查询缓存默认是不开启的,确实用处也不大)

es中的索引结构?

es中使用的是倒排序的索引结构,这种结构的玩法就是存放关键词和包含了关键词的文档的对应关系。可以想象成是一个map结构,key是关键词,value是一个列表,列表中存放了关键词出现的文档id。检索的复杂度是O(1),速度很快。当然,为了减少存储key所占有的空间。实际的存储结构会使用到前缀索引,可以减少重复字符占用的空间。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值