110道 Elasticsearch面试题及答案(持续更新)

最新Elasticsearch面试题【附答案解析】ES面试题及答案,ES最新面试题及答案,ES面试题新答案已经全部更新完了,有些答案是自己总结的,也有些答案是在网上搜集整理的。这些答案难免会存在一些错误,仅供大家参考。如果发现错误还望大家多多包涵,不吝赐教,谢谢~

如果不背 ES面试题的答案,肯定面试会挂!

这套ES面试题大全,希望对大家有帮助哈~

博主已将以下这些面试题整理成了一个面试手册,是PDF版的

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

面试官:想了解ES搜索的底层原理,不再只关注业务层面了。

搜索拆解为“query then fetch” 两个阶段。

query阶段的目的:定位到位置,但不取。

步骤拆解如下:

1、 假设一个索引数据有5主+1副本 共10分片,一次请求会命中(主或者副本分片中)的一个。

2、 每个分片在本地进行查询,结果返回到本地有序的优先队列中。

3、 第2)步骤的结果发送到协调节点,协调节点产生一个全局的排序列表。

fetch阶段的目的:取数据。

路由节点获取所有文档,返回给客户端。

2、Beats 如何与 Elasticsearch 结合使用?

Beats是一种开源工具,可以将数据直接传输到 Elasticsearch 或通过 logstash,在使用Kibana进行查看之前,可以对数据进行处理或过滤。

传输的数据类型包含:审核数据,日志文件,云数据,网络流量和窗口事件日志等。

3、解释一下 Elasticsearch 的 分片?

当文档数量增加,硬盘容量和处理能力不足时,对客户端请求的响应将延迟。

在这种情况下,将索引数据分成小块的过程称为分片,可改善数据搜索结果的获取。

4、精准匹配检索和全文检索匹配检索的不同?

两者的本质区别:

精确匹配用于:是否完全一致?

举例:邮编、身份证号的匹配往往是精准匹配。

全文检索用于:是否相关?

举例:类似B站搜索特定关键词如“马保国 视频”往往是模糊匹配,相关的都返回就可以。

5、您能否说明当前可下载的稳定Elasticsearch版本?

Elasticsearch 当前最新版本是7.10(2020年11月21日)。

为什么问这个问题?ES 更新太快了,应聘者如果了解并使用最新版本,基本能说明他关注 ES 更新。甚至从更广维度讲,他关注技术的迭代和更新。

但,不信你可以问问,很多求职者只知道用了 ES,什么版本一概不知。

6、您能解释一下 Elasticsearch 中的 Explore API 吗?

没有用过,这是 Graph (收费功能)相关的API。

点到为止即可,类似问题实际开发现用现查,类似问题没有什么意义。

https://www.elastic.co/guide/en/elasticsearch/reference/current/graph-explore-api.html

7、elasticsearch了解多少,说说你们公司es的集群架构,索引数据大小,分片有多少,以及一些调优手段 。

面试官:想了解应聘者之前公司接触的ES使用场景、规模,有没有做过比较大规模的索引设计、规划、调优。

如实结合自己的实践场景回答即可。

比如:ES集群架构13个节点,索引根据通道不同共20+索引,根据日期,每日递增20+,索引:10分片,每日递增1亿+数据,

每个通道每天索引大小控制:150GB之内。

仅索引层面调优手段:

设计阶段调优

1、 根据业务增量需求,采取基于日期模板创建索引,通过roll over API滚动索引;

2、 使用别名进行索引管理;

3、 每天凌晨定时对索引做force_merge操作,以释放空间;

4、 采取冷热分离机制,热数据存储到SSD,提高检索效率;冷数据定期进行shrink操作,以缩减存储;

5、 采取curator进行索引的生命周期管理;

6、 仅针对需要分词的字段,合理的设置分词器;

7、 Mapping阶段充分结合各个字段的属性,是否需要检索、是否需要存储等。……..

写入调优

1、 写入前副本数设置为0;

2、 写入前关闭refresh_interval设置为-1,禁用刷新机制;

3、 写入过程中:采取bulk批量写入;

4、 写入后恢复副本数和刷新间隔;

5、 尽量使用自动生成的id。

查询调优

1、 禁用wildcard;

2、 禁用批量terms(成百上千的场景);

3、 充分利用倒排索引机制,能keyword类型尽量keyword;

4、 数据量大时候,可以先基于时间敲定索引再检索;

5、 设置合理的路由机制。

1.4、其他调优

部署调优,业务调优等。

上面的提及一部分,面试者就基本对你之前的实践或者运维经验有所评估了。

8、能列举过你使用的 X-Pack 命令吗?

7.1 安全功能免费后,使用了:setup-passwords 为账号设置密码,确保集群安全。

9、elasticsearch 全文检索

(1) 客户端使用RestFul API向对应的node发送查询请求

(2)协调节点将请求转发到所有节点(primary或者replica)所有节点将对应的数据查询之后返回对应的doc id 返回给协调节点

(3)协调节点将doc进行排序聚合

(4) 协调节点再根据doc id 把查询请求发送到对应shard的node,返回document

10、你之前公司的ElasticSearch集群,一个Node一般会分配几个分片?

我们遵循官方建议,一个Node最好不要多于三个shards.

1、我们可以在 Elasticsearch 中执行搜索的各种可能方式有哪些?

核心方式如下:

方式一:基于 DSL 检索(最常用) Elasticsearch提供基于JSON的完整查询DSL来定义查询。

GET /shirts/_search { "query": { "bool": { "filter": [ { "term": { "color": "red" }}, { "term": { "brand": "gucci" }} ] } } }

方式二:基于 URL 检索

GET /my_index/_search?q=user:seina

方式三:类SQL 检索

POST /_sql?format=txt { "query": "SELECT * FROM uint-2020-08-17 ORDER BY itemid DESC LIMIT 5" }

功能还不完备,不推荐使用。

2、ElasticSearch对于大数据量(上亿量级)的聚合如何实现?

ElasticSearch提供的首个近似聚合是cardinality度量。它提供一个字段的基数,即该字段的distinct或者unique值的数目。它是基于HLL算法的。HLL会先对我们的输入做哈希运算,然后根据哈希运算结果中的bits做概率估算从而得到基数。其特点是:

可配置的精度,用来控制内存的使用(更精确=更多内存),小的数据集精度是非常高的;我们可以通过配置参数来设置去重需要的固定内存使用量,无论数千还是数十亿的唯一值,内存使用量只与你配置的精确度相关 。

图片

3、详细描述一下 Elasticsearch 索引文档的过程

面试官:想了解 ES 的底层原理,不再只关注业务层面了。

这里的索引文档应该理解为文档写入 ES,创建索引的过程。文档写入包含:单文档写入和批量 bulk 写入,这里只解释一下:单文档写入流程。

**第一步:**客户写集群某节点写入数据,发送请求。(如果没有指定路由/协调节点,请求的节点扮演路由节点的角色。)

**第二步:**节点 1 接受到请求后,使用文档_id 来确定文档属于分片 0。请求会被转到另外的节点,假定节点 3。因此分片 0 的主分片分配到节点 3 上。

**第三步:**节点 3 在主分片上执行写操作,如果成功,则将请求并行转发到节点 1和节点 2 的副本分片上,等待结果返回。所有的副本分片都报告成功,节点 3 将向协调节点(节点 1)报告成功,节点 1 向请求客户端报告写入成功。

**如果面试官再问:**第二步中的文档获取分片的过程?

回借助路由算法获取,路由算法就是根据路由和文档 id 计算目标的分片 id 的

过程。

1shard = hash(_routing) % (num_of_primary_shards)

4、elasticsearch 数据预热

数据预热是指,每隔一段时间,将热数据

手动在后台查询一遍,将热数据刷新到fileSystem cache上

5、如何使用 Elasticsearch Tokenizer?

Tokenizer 接收字符流(如果包含了字符过滤,则接收过滤后的字符流;否则,接收原始字符流),将其分词。同时记录分词后的顺序或位置(position),以及开始值(start_offset)和偏移值(end_offset-start_offset)。

6、elasticsearch 数据的写入原理

es数据写入原理主要可以分为4个操作:

1、 refresh

2、 commit

3、 flush

4、 merge

操作触发条件操作过程

 

 

7、你是如何做 ElasticSearch 写入调优的?

1)写入前副本数设置为0;

2)写入前关闭refresh_interval设置为-1,禁用刷新机制;

3)写入过程中:采取bulk批量写入;

4) 写入后恢复副本数和刷新间隔;

5) 尽量使用自动生成的id。

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

1、 Elasticsearch的选主是ZenDiscovery模块负责的,主要包含Ping(节点之间通过这个RPC来发现彼此)和Unicast(单播模块包含一个主机列表以控制哪些节点需要ping通)这两部分;

2、 对所有可以成为master的节点(node.master: true)根据nodeId字典排序,每次选举每个节点都把自己所知道节点排一次序,然后选出第一个(第0位)节点,暂且认为它是master节点。

3、 如果对某个节点的投票数达到一定的值(可以成为master节点数n/2+1)并且该节点自己也选举自己,那这个节点就是master。否则重新选举一直到满足上述条件。

4、 补充:master节点的职责主要包括集群、节点和索引的管理,不负责文档级别的管理;data节点可以关闭http功能*。

9、ElasticSearch主分片数量可以在后期更改吗?为什么?

不可以,因为根据路由算法shard = hash(document_id) % (num_of_primary_shards),当主分片数量变化时会影响数据被路由到哪个分片上。

10、如何监控 Elasticsearch 集群状态?

Marvel 让你可以很简单的通过 Kibana 监控 Elasticsearch。你可以实时查看你的集群健康状态和性能,也可以分析过去的集群、索引和节点指标。

1、Kibana在Elasticsearch的哪些地方以及如何使用?

Kibana是ELK Stack –日志分析解决方案的一部分。

它是一种开放源代码的可视化工具,可以以拖拽、自定义图表的方式直观分析数据,极大降低的数据分析的门槛。

未来会向类似:商业智能和分析软件 - Tableau 发展。

2、elasticsearch是如何实现master选举的

面试官:想了解ES集群的底层原理,不再只关注业务层面了。

前置前提:

1、 只有候选主节点(master:true)的节点才能成为主节点。

2、 最小主节点数(min_master_nodes)的目的是防止脑裂。

这个我看了各种网上分析的版本和源码分析的书籍,云里雾里。

核对了一下代码,核心入口为findMaster,选择主节点成功返回对应Master,否则返回null。选举流程大致描述如下:

第一步:确认候选主节点数达标,elasticsearch.yml设置的值discovery.zen.minimum_master_nodes;

第二步:比较:先判定是否具备master资格,具备候选主节点资格的优先返回;若两节点都为候选主节点,则id小的值会主节点。注意这里的id为string类型。

题外话:获取节点id的方法。

1GET /_cat/nodes?v&h=ip,port,heapPercent,heapMax,id,name 2ip port heapPercent heapMax id name

3、客户端在和集群连接时,是如何选择特定的节点执行请求的?

TransportClient利用transport模块远程连接一个ElasticSearch集群。它并不加入到集群中,只是简单的获得一个或者多个初始化的transport地址,并以轮询的方式与这些地址进行通信。

4、你能告诉我 Elasticsearch 中的数据存储功能吗?

Elasticsearch是一个搜索引擎,输入写入ES的过程就是索引化的过程,数据按照既定的 Mapping 序列化为Json 文档实现存储。

5、Master 节点和 候选 Master节点有什么区别?

主节点负责集群相关的操作,例如创建或删除索引,跟踪哪些节点是集群的一部分,以及决定将哪些分片分配给哪些节点。

拥有稳定的主节点是衡量集群健康的重要标志。

而候选主节点是被选具备候选资格,可以被选为主节点的那些节点。

6、介绍下你们电商搜索的整体技术架构。

 

 

7、客户端在和集群连接时,如何选择特定的节点执行请求的?

TransportClient 利用 transport 模块远程连接一个 elasticsearch 集群。它并不加入到集群中,只是简单的获得一个或者多个初始化的 transport 地址,并以 轮询 的方式与这些地址进行通信。

8、对于 GC 方面,在使用 Elasticsearch 时要注意什么?

1、 SEE

2、 倒排词典的索引需要常驻内存,无法 GC,需要监控 data node 上 segmentmemory 增长趋势。

3、 各类缓存,field cache, filter cache, indexing cache, bulk queue 等等,要设置合理的大小,并且要应该根据最坏的情况来看 heap 是否够用,也就是各类缓存全部占满的时候,还有 heap 空间可以分配给其他任务吗?避免采用 clear cache等“自欺欺人”的方式来释放内存。

4、 避免返回大量结果集的搜索与聚合。确实需要大量拉取数据的场景,可以采用scan & scroll api 来实现。

5、 cluster stats 驻留内存并无法水平扩展,超大规模集群可以考虑分拆成多个集群通过 tribe node 连接。

6、 想知道 heap 够不够,必须结合实际应用场景,并对集群的 heap 使用情况做持续的监控。

9、拼写纠错是如何实现的?

1、拼写纠错是基于编辑距离来实现;编辑距离是一种标准的方法,它用来表示经过插入、删除和替换操作从一个字符串转换到另外一个字符串的最小操作步数;

**2、编辑距离的计算过程:**比如要计算 batyu 和 beauty 的编辑距离,先创建一个7×8 的表(batyu 长度为 5,coffee 长度为 6,各加 2),接着,在如下位置填入

黑色数字。

其他格的计算过程是取以下三个值的最小值:

如果最上方的字符等于最左方的字符,则为左上方的数字。否则为左上方的数字 +1。(对于 3,3 来说为 0)左方数字+1(对于 3,3 格来说为 2)上方数字+1(对于 3,3 格来说为 2)

最终取右下角的值即为编辑距离的值 3。

![70_10.png][70_10.png]

对于拼写纠错,我们考虑构造一个度量空间(Metric Space),该空间内任何关

系满足以下三条基本条件:

d(x,y) = 0 -- 假如 x 与 y 的距离为 0,则 x=y

d(x,y) = d(y,x) -- x 到 y 的距离等同于 y 到 x 的距离

d(x,y) + d(y,z) >= d(x,z) -- 三角不等式

1、 根据三角不等式,则满足与 query 距离在 n 范围内的另一个字符转 B,其与 A的距离最大为 d+n,最小为 d-n。

2、 BK 树的构造就过程如下:每个节点有任意个子节点,每条边有个值表示编辑距离。所有子节点到父节点的边上标注 n 表示编辑距离恰好为 n。比如,我们有棵树父节点是”book”和两个子

点”cake”和”books”,”book”到”books”的边标号 :

1、 ”book”到”cake”的边上标号.

2、 从字典里构造好树后,无论何时你想插入新单词时.计算该单词与根节点的编辑距离,并且查找数值为 d(neweord, root)的边。递归得与各子节点进行比较,直到没有子节点,你就可以创建新的子节点并将新单词保存在那。比如,插入”boo”到刚才上述例子的树中,我们先检查根节点,查找 d(“book”, “boo”) = 1 的边,然后检查标号为1 的边的子节点,得到单词”books”。我们再计算距离 d(“books”, “boo”)=2,则将新单词插在”books”之后,边标号为 2。

3、 查询相似词如下:计算单词与根节点的编辑距离 d,然后递归查找每个子节点标号为 d-n 到 d+n(包含)的边。假如被检查的节点与搜索单词的距离 d 小于n,则返回该节点并继续查询。比如输入 cape 且最大容忍距离为 1,则先计算和根的编辑距离 d(“book”,“cape”)=4,然后接着找和根节点之间编辑距离为 3 到5 的,这个就找到了cake 这个节点,计算 d(“cake”, “cape”)=1,满足条件所以返回 cake,然后再找和 cake 节点编辑距离是 0 到 2 的,分别找到 cape 和cart 节点,这样就得到 cape 这个满足条件的结果。

10、在Elasticsearch中 cat API的功能是什么?

cat API 命令提供了Elasticsearch 集群的分析、概述和运行状况,其中包括与别名,分配,索引,节点属性等有关的信息。

这些 cat 命令使用查询字符串作为其参数,并以J SON 文档格式返回结果信息。

更多 ES面试题 60道

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

02、ElasticSearch中的倒排索引是什么?

03、elasticsearch 读取数据

04、拼写纠错是如何实现的?

05、介绍下你们电商搜索的整体技术架构。

06、Elasticsearch在部署时,对Linux的设置有哪些优化方法?

07、REST API在 Elasticsearch 方面有哪些优势?

08、ElasticSearch如何避免脑裂?

09、elasticsearch 全文检索

10、定义副本、创建副本的好处是什么?

11、elasticsearch的倒排索引是什么

12、Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法

13、详细描述一下Elasticsearch索引文档的过程

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

15、请解释在 Elasticsearch 集群中添加或创建索引的过程?

16、安装 Elasticsearch 需要依赖什么组件吗?

17、如何使用 Elastic Reporting ?

18、elasticsearch 是如何实现 master 选举的

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

20、详细描述一下Elasticsearch更新和删除文档的过程。

21、elasticsearch的倒排索引是什么

22、Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法

23、详细描述一下Elasticsearch索引文档的过程

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

25、请解释在 Elasticsearch 集群中添加或创建索引的过程?

26、安装 Elasticsearch 需要依赖什么组件吗?

27、如何使用 Elastic Reporting ?

28、elasticsearch 是如何实现 master 选举的

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

30、详细描述一下Elasticsearch更新和删除文档的过程。

31、我们可以在 Elasticsearch 中执行搜索的各种可能方式有哪些?

32、ElasticSearch对于大数据量(上亿量级)的聚合如何实现?

33、详细描述一下 Elasticsearch 索引文档的过程

34、elasticsearch 数据预热

35、如何使用 Elasticsearch Tokenizer?

36、elasticsearch 数据的写入原理

37、你是如何做 ElasticSearch 写入调优的?

38、Elasticsearch是如何实现Master选举的?

39、ElasticSearch主分片数量可以在后期更改吗?为什么?

40、如何监控 Elasticsearch 集群状态?

41、Kibana在Elasticsearch的哪些地方以及如何使用?

42、elasticsearch是如何实现master选举的

43、客户端在和集群连接时,是如何选择特定的节点执行请求的?

44、你能告诉我 Elasticsearch 中的数据存储功能吗?

45、Master 节点和 候选 Master节点有什么区别?

46、介绍下你们电商搜索的整体技术架构。

47、客户端在和集群连接时,如何选择特定的节点执行请求的?

48、对于 GC 方面,在使用 Elasticsearch 时要注意什么?

49、拼写纠错是如何实现的?

50、在Elasticsearch中 cat API的功能是什么?

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

52、ElasticSearch中的倒排索引是什么?

53、elasticsearch 读取数据

54、拼写纠错是如何实现的?

55、介绍下你们电商搜索的整体技术架构。

56、Elasticsearch在部署时,对Linux的设置有哪些优化方法?

57、REST API在 Elasticsearch 方面有哪些优势?

58、ElasticSearch如何避免脑裂?

59、elasticsearch 全文检索

60、定义副本、创建副本的好处是什么?

如果不背 ES面试题的答案,肯定面试会挂!

这套ES面试题大全,希望对大家有帮助哈~

博主已将以下这些面试题整理成了一个面试手册,是PDF版的

posted @ 2021-12-02 21:30  架构师专栏  阅读(10071)  评论(0编辑  收藏  举报