【elasticsearch】 面试题

1、为什么要使用 Elasticsearch? (或 回答什么是ES?)

  在我们常用的业务场景中我们往往采用模糊查询进行数据的搜索,而模糊查询如果用全表扫描,在百万数据量的情况下, 查询效率是非常低下。而使用Elasticsearch ,做一个全文索引, 可以提高查询速度。 
ES是一个基于Lucene库的搜索引擎,它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。 使用一种称为 倒排索引 的结构,倒排索引会在存储数据时将关键词和数据进行关联,保存到倒排表中,然后查询时,将查询内容进行分词后在倒排表中进行查询,最后匹配数据 ,可以提高查询速度。

 



ES还有以下方面优势:
1. 横向可扩展性:只需要增加一台服务器,做一点儿配置,启动一下ES进程就可以并入集群;
2. 分片机制提供更好的分布性:同一个索引分成多个分片(sharding),分而治之的方式来提升处理效率;
3. 高可用:提供复制(replica)机制,一个分片可以设置多个复制,使得某台服务器宕机的情况下,集群仍旧可以照常运行,并会把由于服务器宕机丢失的复制恢复到其它可用节点上;

2、elasticsearch 的倒排索引是什么?

倒排索引是通过分词策略,形成词和文章的关系映射表,这种词典+映射表的方式就是倒排索引,有点类似于我们以前使用的新华字典。倒排索引可极大的提高查询效率。

在这里插入图片描述


 学术的解答方式:

倒排索引,相反于一篇文章包含了哪些词,它从词出发,记载了这个词在哪些文档中出现过,由两部分组成——词典和倒排表。

加分项:倒排索引的底层实现是基于:FST(Finite State Transducer)数据结构。

lucene 从 4+版本后开始大量使用的数据结构是 FST。FST 有两个优点:

(1)空间占用小。通过对词典中单词前缀和后缀的重复利用,压缩了存储空间;

(2)查询速度快。O(len(str))的查询时间复杂度。 

3、倒排索引的搜索过程是什么样的?

搜索的时候先去查询词典,看看所要查询的单词在不在词典当中,如果不在的话搜索结束,如果在的话,还要看看单词在倒排列表中的指针是什么,通过倒排列表去获取它这个单词对应文档ID的列表,然后拿着文档ID去对应我们的数据

倒排索引,是先找到用户要搜索的词条,根据词条得到保护词条的文档的id,然后根据id获取文档。是根据词条找文档的过程

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

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

解答:

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

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

步骤拆解如下:

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

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

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

fetch 阶段的目的:取数据。

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

5.详细描述一下 Elasticsearch 索引文档的数据写入过程

单文档写入

在这里插入图片描述

 

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

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

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

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

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

1shard = hash(_routing) % (num_of_primary_shards) 

【2022版】ElasticSearch面试题整理(含答案解析)_码农翻身把歌唱的博客-CSDN博客_elasticsearch面试题

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elasticsearch面试题涉及到的主题非常广泛,包括索引、倒排索引、数据调优、部署架构、master选举、文档索引和搜索过程、集群连接、更新和删除文档过程、大数据量聚合、读写一致性、个性化搜索方案等等。对于这样一个广泛的问题范围,我将从几个主要方面给出一些简要的回答。 1. Elasticsearch的倒排索引是什么?倒排索引是一种数据结构,用于快速定位和检索文档中的词项。它将每个词项与包含该词项的文档进行关联,以便在搜索过程中能够快速找到相关文档。 2. Elasticsearch的数据调优和部署。数据调优包括分片和副本的设置、硬件资源的优化和性能调优等。部署时需要考虑Linux的设置优化方法,例如调整文件描述符限制、内核参数调整和网络设置等。 3. Elasticsearch是如何实现master选举的?Elasticsearch使用zookeeper或者内置的选举机制来实现master选举。每个节点都有一个优先级,具有更高优先级的节点将被选为master节点。 4. Elasticsearch的文档索引过程。文档索引过程包括分析文档、创建倒排索引、存储文档和更新内部数据结构等步骤。 5. Elasticsearch的搜索过程。搜索过程首先是根据查询条件进行分词和分析,然后根据倒排索引进行匹配和评分,最后返回匹配的文档结果。 6. Elasticsearch集群连接时,如何选择特定的节点执行请求?可以使用负载均衡器或者通过配置客户端连接参数来选择特定节点执行请求。 7. Elasticsearch的更新和删除文档过程。更新文档时,Elasticsearch首先标记原始文档为删除状态,并在索引中添加新的更新文档。删除文档时,Elasticsearch会将文档从索引中标记为删除状态。 请注意,这只是对部分面试题的简要回答。对于每个问题,都有更详细和深入的讨论和解释。如果您对某个特定的问题有更具体的需求,请提供更具体的问题描述。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [ElasticSearch面试题 30道1](https://download.csdn.net/download/weixin_35785909/86307252)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【ElasticSearch面试】10道不得不会的ElasticSearch面试题](https://blog.csdn.net/qq_40374604/article/details/123761794)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值