【面试篇】Es

基础概念类

问题:请简要介绍 Elasticsearch 是什么,它的主要特点有哪些?

答案:Elasticsearch 是一个基于 Lucene 库的开源分布式搜索引擎和分析引擎。它能对海量数据进行实时搜索与分析,被广泛应用于日志分析、全文搜索、监控指标分析等场景。其主要特点包括:

分布式架构:可轻松扩展到多个节点,实现水平扩展,以处理大规模数据和高并发请求。

实时性:数据写入后能近乎实时地被搜索到,满足对数据实时性要求较高的应用场景。

灵活的文档模型:使用 JSON 格式存储和处理数据,允许动态定义数据结构,适应各种类型的数据。

强大的搜索功能:支持全文搜索、模糊搜索、聚合分析等多种搜索方式,可对数据进行复杂的查询和分析。

问题:Elasticsearch 中的索引、文档和类型分别是什么含义,它们之间有什么关系?

答案:

索引:是一个存储关联数据的逻辑空间,类似于关系型数据库中的数据库,它包含了多个文档。

文档:是 Elasticsearch 中最基本的数据单元,相当于关系型数据库中的一行记录,以 JSON 格式存储,包含具体的数据字段和值。

类型:在早期版本中,一个索引可以包含多种类型的文档,用于对不同结构的文档进行分类。但从 Elasticsearch 7.x 版本开始,逐渐弱化类型的概念,一个索引只允许存在一个默认类型(_doc),到 8.x 版本后不再支持多类型。

关系:一个索引可以包含一个或多个类型(早期版本),每个类型下包含多个文档,文档存储在对应的索引的类型中。

索引与文档操作类

问题:在 Elasticsearch 中,怎样创建一个索引,并且向索引中插入文档?

答案:可以使用 Elasticsearch 提供的相关工具或客户端接口来操作。创建索引时,需要指定索引名称,并可以设置一些参数,比如分片数量、副本数量,以及定义数据字段的映射关系,确定每个字段的数据类型等。插入文档时,要指定索引名和文档所属的类型(新版本一般是默认类型 _doc ),然后提供以 JSON 格式表示的文档内容,包含具体的字段和对应的值。

问题:Elasticsearch 中的文档更新和删除是如何实现的,有什么需要注意的地方?

答案:

更新文档:有两种常见方式。一种是通过专门的更新操作,直接指定要更新的文档 ID 和需要修改的字段及新值。另一种是先获取文档内容,在本地修改后,再将整个文档重新索引到 Elasticsearch 中。

删除文档:通过指定索引和文档 ID 来执行删除操作。

需要注意的是,删除操作实际上是将文档标记为已删除,不会立即从磁盘上物理删除,而是在后续的段合并等过程中才会真正清理。对于更新操作,要考虑并发情况,避免数据不一致。同时,更新操作可能会导致索引的重建,影响性能。

分布式原理类

问题:Elasticsearch 是如何实现分布式存储和搜索的?

答案:

分布式存储:Elasticsearch 将索引划分成多个分片,每个分片还可以有多个副本。分片会分布在不同的节点上,数据依据一定的算法分散存储在各个分片中。写入数据时,先写入主分片,再同步到副本分片。

分布式搜索:当接收到搜索请求,请求会先到协调节点,协调节点将请求转发到包含相关分片的节点。这些节点并行执行搜索,然后把结果返回给协调节点,协调节点合并、排序结果后返回给客户端,实现对大规模数据的快速搜索。

问题:Elasticsearch 中的分片和副本有什么作用,如何合理设置分片数和副本数?

答案:

分片的作用:把索引数据分割成较小部分,分布在不同节点,实现数据水平扩展,提升存储和处理能力,还能并行处理搜索请求,加快搜索速度。

副本的作用:提供数据冗余,保障数据高可用性,主分片所在节点故障时,副本分片能接替工作。同时,副本分片可处理读请求,分担主分片负载,提高搜索性能。

合理设置分片数和副本数:分片数要依据数据量大小和未来增长预期来确定,一般建议每个分片大小不超 50GB,数据量小设置过多分片会增加管理开销和性能损耗。副本数根据对数据可用性和性能的需求决定,增加副本数可提升读性能和可用性,但会占用更多磁盘空间和网络带宽,通常设置 1 到 3 个副本较为合适。

性能优化类

问题:在 Elasticsearch 中,有哪些常见的性能优化方法?

答案:

合理设计索引结构:包括选择合适的字段类型,避免过多的字段和复杂的嵌套结构,减少不必要的字段映射。

优化分片和副本设置:根据数据量和访问模式,合理设置分片数和副本数,避免分片过多或过少。

使用合适的查询语句:避免复杂的全表扫描查询,尽量使用过滤器、聚合等高效的查询方式,减少返回的数据量。

定期进行索引优化:如执行段合并操作,减少索引文件数量,提高查询性能。

硬件资源优化:确保服务器有足够的内存、CPU 和磁盘 I/O 性能,合理分配资源给 Elasticsearch 进程。

问题:Elasticsearch 中的慢查询是如何定位和优化的?

答案:可以通过开启 Elasticsearch 的慢查询日志功能,记录执行时间较长的查询语句。然后分析慢查询日志,查看具体的查询语句、执行时间、涉及的索引和分片等信息。优化方面,可以检查查询语句是否合理,是否可以添加合适的索引来加快查询速度,比如对经常用于过滤或排序的字段创建索引。还可以调整查询的分页参数,避免一次性获取过多数据导致查询缓慢等。

相关推荐
uhakadotcom20 分钟前
Google Cloud Dataproc:简化大数据处理的强大工具
后端·算法·面试
拉不动的猪37 分钟前
react基础2
前端·javascript·面试
拉不动的猪40 分钟前
react基础1
前端·javascript·面试
uhakadotcom1 小时前
Mars与PyODPS DataFrame:功能、区别和使用场景
后端·面试·github
uhakadotcom1 小时前
PyTorch 分布式训练入门指南
算法·面试·github
uhakadotcom1 小时前
PyTorch 与 Amazon SageMaker 配合使用:基础知识与实践
算法·面试·github
Moment1 小时前
多人协同编辑算法 —— CRDT 算法 🐂🐂🐂
前端·javascript·面试
uhakadotcom1 小时前
在Google Cloud上使用PyTorch:如何在Vertex AI上训练和调优PyTorch模型
算法·面试·github
程序员清风3 小时前
Redis Pipeline 和 MGET,如果报错了,他们的异常机制是什么样的?
java·后端·面试
小诸葛的博客4 小时前
es基本概念
大数据·elasticsearch·搜索引擎