Elasticsearch高频面试题,你能撑到第几题?

95 阅读3分钟

1. 什么是Elasticsearch,概念

ES 是一个开源的高扩展的分布式全文搜索引擎,用于全文搜索、结构化搜索以及分析,使用java开发,提供RESTful web接口,每个字段都被索引并可被搜索,可以快速存储、搜索、分析海量的数据

2. 什么是倒排索引?

倒排索引,就是通过分词策略,将文档的内容进行分词,然后记录每个分词在出现的文档ID和位置,这样每个分词就记录一系列的文档,然后就可以通过分词在这个映射表中找到其出现的文档和位置,这样会大大提高检索效率

3. text 和 keyword类型的区别?

keyword 类型是不会分词的,直接根据字符串内容建立倒排索引,keyword类型的字段只能通过精确值搜索到;Text 类型在存入 Elasticsearch 的时候,会根据分词策略先分词,然后根据分词后的内容建立倒排索引

4. 有哪些名词,解释一下

(1)index 索引: 索引类似于mysql 中的数据库

(2)type 类型: 类型是用来定义数据结构,7.X之后基本不用了,默认 _doc

(3)document 文档: 一个文档就是一条记录,就是一条记录

(4)Field 字段: Field是Elasticsearch的最小单位,一个document里面有多个field

(5)shard 分片: 单台机器无法存储大量数据,es可以将一个索引中的数据切分为多个shard,分布在多台服务器上存储。有了shard就可以横向扩展,存储更多数据,让搜索和分析等操作分布到多台服务器上去执行,提升吞吐量和性能。在单机上,设置再多的分片也是没有用的

(6)replica 副本: 副本数量,默认是1,当集群模式时,会为每一个分片生成一个副本,副本存储在其他的服务器上。当主分片服务器故障时,副分片立即成为主分片,从而达到了高可用

5. query 和 filter 的区别

(1)query: 查询操作不仅仅会进行查询,还会计算分值,用于确定相关度

(2)filter: 查询操作仅判断是否满足查询条件,不会计算任何分值,也不会关心返回的排序问题,同时,filter 查询的结果可以被缓存,提高性能

6. es 的分布式架构原理能说一下吗,是怎么实现分布式的?

一个索引可以被拆分成好几个分片shard,每个shard存储部分数据。拆分shard的好处是,一是为了横向扩展,每个分片均分shard的数据,当数据量太大时,可以新增集群中的机器,新建一个索引,将旧数据导进新索引。二是提高性能,数据分布在不同的shard,即在多台机器上,所有的操作,都会在多台机器上分布式执行,提高了吞吐量和性能。

每个shard数据是有副本的,默认是1个,每个shard 都有一个主分片 primard shard ,负责写入数据,还有几个 replica shard,主分片写入数据后会同步到其他几个 replica shard,当主分片机器故障后,副分片立即成为主分片,从而实现了高可用

7. 当数据量很大时,如何提高查询效率?

当查询es时,操作系统会将磁盘中的数据自动缓存到 filesystem cache 里面,要给 filesystem cache更多的内存

数据预热,将部分热点数据提前刷到 filesystem cache 中,这样效率会高

冷热分离,将热点数据写到一个索引中,冷门数据写到另外的索引中

不允许深度分页查询,深度查询时非常慢的