Elasticsearch面试题话术

1、介绍一下ElasticSearch,以及在项目中的应用

​ Java开发的基于lucene分布式全文搜索引擎。基于restful Web接口。在检索领域相当优秀,在我们项目中主要是负责检索XX信息。XX信息构成是比较复杂的,并且数据量巨大,至少会有几十万,如果使用mysql做检索,效率会非常低,并且对mysql造成很大的压力。
在使用过程中主要需要做几件事:

1、Es服务的安装,中文分词器使用IK分词器,这个主要是运维负责;
2、在项目中集成springDataElasticSearch框架,用来操作ES;
3、创建实体类,标注了一个Document注解,这个注解里声明了这个索引库的名称以及它的类型,还有他的分片儿信息,还有他的副本信息。在这个类中创建所有跟XX相关的字段。同样会有一些注解去标识他的数据类型,他的比如说id字段会有一个id注解,其他字段用@Field注解标注在es中存储的数据类型,是否进行分词等,有些字段也可以不加任何注解,es会根据存储的数据去判断字段在es中存储的类型。等其他的字段都建好之后,然后又新添加了一个统一的搜索字段,我们给它定义的名称叫all,我们会把经常搜索的数据全部定义到这个字段里。比方说XX标题、副标题、品牌等;

4、初始全量数据导入

使用springboot测试类实现导入,分批从mysql中取出,组装数据到,保存到es中

5、修改、新增、删除等增量数据导入

使用rabbitMQ实现,商品上下架的时候发送Mq消息,搜索微服务以及静态页面微服务实现ES数据的同步和静态页面的数据同步操作

6、使用es实现搜索

使用all进行分词查询,搜索时,按照matchQuery做的,这个方法的做法是会把输入的关键词分词之后,然后去匹配,匹配的规则我们设置的是and的方式匹配,就是分词之后每个词条都匹配才算匹配,我们在项目里设置了个all字段,会把所有可能被分词的字段都会放到这个里边,只对这一个字段设置分词,关键字搜索的时候,都会去匹配这个字段,
使用规格参数聚合实现商品搜索规格参数的渲染
使用分类和品牌聚合实现商品分类和品牌查询的渲染
使用布尔查询实现规格参数、品牌、分类的过滤
实现分页、排序等需求

2、为什么使用Es?

​ 因为在我们XX中的数据,将来会非常多,所以采用以往的模糊查询,模糊查询前置配置,会放弃索引,导致XX查询是全表扫面,在百万级别的数据库中,效率非常低下,而我们使用ES做一个全文索引,我们将经常查询的商品的某些字段,比如说XX名,描述、价格还有id这些字段我们放入我们索引库里,es内部有个倒排索引的机制,普通的索引的原理是通过id寻找数据,而倒排索引是通过数据寻找id,它的大概原理是把需要分词的数据通过ik分词器分词之后,记录出每个词条对应的文档id,在进行搜索的时候,将搜索关键字分词之后,找到每个词条的文档id,然后在进行通过id搜索操作,大大提高了全文检索的效率,这也是在全文检索方面最常用的技术

3、 什么是桶(bucket)?什么是度量(metrics)?

​ 桶,是按照某种方式对数据进行分组,每一组数据在ES中称为一个桶,例如我们根据国籍对人划分,可以得到中国桶、英国桶,日本桶……或者我们按照年龄段对人进行划分:010,1020,2030,3040等。分桶的方式有很多,比如按日期阶梯分组、按数值阶梯分组、按词条内容分组、按数值和日期范围分组等。
​ 度量,分组完成以后,我们一般会对组中的数据进行聚合运算,例如求平均值、最大、最小、求和等,这些在ES中称为度量。度量有求平均值、求最大最小值、求百分比、求和等。

4、es内部存储的存储结构

es内部默认就是分布式的存储结构,每当创建一个索引库的时候,我们需要指定当前索引库的分片数和副本数,分片数就是把数据分布式的存放在分片上,所有分片的数据加起来就是整个索引库的数据量,分片数越多,数据存放的越分散,搜索的时候,es会检索每个分片的伤的数据一起返回。副本数是指在数据进入索引库的时候,同时需要备份的数量,如果副本数量越多,那么需要消耗的存储空间就会越多,过多的话会造成空间浪费,一般生产中使用的时候都用的默认的配置,就是5个分片,2个副本。

5、描述一下Elasticsearch更新和删除文档的过程

1、删除和更新也都是写操作,但是 Elasticsearch 中的文档是不可变的,因此不能被删除或者改动以展示其变更;
2、在文档被创建时,ES会为该文档指定一个版本号,当执行更新时,旧版本的文档在.del 文件中被标记为删除,新版本的文档被索引到一个新段。旧版本的文档依然能匹配查询,但是会在结果中被过滤掉。删除同理

6、详细描述一下Elasticsearch搜索的过程

1、搜索被执行成一个两阶段过程,我们称之为 Query Then Fetch;
2、在初始查询阶段时,查询会广播到每个索引的主分片或者副本分片。搜索并构建一个优先队列。
3、每个分片返回各自优先队列中 所有文档的 ID 和排序值 给协调节点来合并结果列表。 4、协调节点将结果列表中的ID对应的文档取回,返回结果给客户端。

7、在并发情况下,Elasticsearch如果保证读写一致

整体使用版本号机制的乐观锁来控制; 对于写操作,默认为只有当大多数分片可用时才允许写操作。但即使大多数可用,也可能存在因为网络等原因导致写入副本失败,分片将会在一个不同的节点上重建直到成功。 对于读操作,可以设置副本为同步状态(默认),就是当主副分片都完成后才会返回;如果设置副本为异步时,也可以通过参数设置来只查询主分片,确查询最新数据。

8、Elasticsearch是如何实现Master选举的

1、ES的选主是 ZenDiscovery 模块负责,首先配置每个节点是否可能成为master节点,当ZenDiscovery 通过ping发现多数节点认为当前没有master的时候,发起选举 2、选举时,把所有能做master的节点根据节点id字典排序,选出第一个节点暂定为主节点 3、然后再发起投票,票数过半并且该节点自己也选举自己,那这个节点就是 master。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值