面试分享——Elasticsearch面试题

目录

1.Elasticsearch数据建模相关问题

1.1问题描述

1.2问题回答

2.Elasticsearch 查询和分析相关问题

2.1问题描述

2.2问题回答

3.Elasticsearch 集成与开发问题

3.1问题描述

3.2问题回答

4.Elasticsearch DSL 相关应用选型等问题

4.1问题描述

4.2问题回答

4.2.1你对 Elasticsearch Query DSL 有多熟悉?请给出一个你认为高效的查询例子。

4.2.2使用 Elasticsearch DSL 编写一个可以处理模糊搜索和自动完成功能的查询。

5.Elasticsearch 索引数据同步相关问题

5.1问题描述

5.2问题回答

5.2.1描述如何保证数据库和 Elasticsearch 索引间的数据同步

5.2.2你是如何处理批量索引和更新大量文档的?

6.Elasticsearch 性能调优和索引维护相关问题

6.1问题描述

6.2问题回答

6.2.1在开发过程中,你会如何处理 Elasticsearch 的索引碎片化?

6.2.2有没有经验进行索引的映射迁移或重建?

7.Elasticsearch 错误处理和日志相关问题

7.1问题描述

7.2问题回答

8.Elasticsearch API使用和最佳实践相关问题

8.1问题描述

8.2问题回答

9.Elasticsearch 安全性和权限控制相关问题

9.1问题描述

9.2问题回答

9.2.1描述在应用程序中实现 Elasticsearch 安全性的策略

9.2.2你是如何在 Elasticsearch 中管理细粒度的访问控制?

10.Elasticsearch 容错性和高可用性

10.1问题描述

10.2问题回答

11.Elasticsearch 监控和警报机制

11.1问题描述

11.2问题回答

11.2.1在开发过程中,你如何利用监控工具如 Elasticsearch 的 X-Pack 或其他插件来观察集群的健康状况?

11.2.2你如何设置和处理与 Elasticsearch 相关的警报?


当涉及到 Elasticsearch 开发者的面试时,问题通常会更专注于软件开发生命周期内与 Elasticsearch 集成的具体技术细节和实际应用场景。

1.Elasticsearch数据建模相关问题

1.1问题描述

描述如何设计 Elasticsearch 索引以支持高效的全文搜索和聚合操作。

在数据建模过程中,你如何决定使用嵌套类型还是平面结构?

1.2问题回答

  • 倒排索引以支 持全文检索;
  • 正排索引以支持 聚合操作。

关于嵌套结构、平面结构——实践表明:

如果能平面宽表存储,咱们就宽表,空间换时间的方式是非常有效的数据建模方式;

除非特殊情况,当子文档更新不频繁的场景,推荐使用 Nested 类型;

子文档更新频繁的场景,推荐使用:Join 类型。

2.Elasticsearch 查询和分析相关问题

2.1问题描述

描述你如何优化复杂的 Elasticsearch 查询,以提高性能。

如果需要对大数据集进行实时分析,你会采取哪些策略?

2.2问题回答

硬件资源层面,要给到位。能 SSD 磁盘的,优先SSD磁盘。这样,写入、检索性能均比普通磁盘要好。能内存高配的尽量高配,推荐64GB,且堆内存设置32GB之内;如果更高配置,有待商榷和验证性能。CPU核数决定并发支持力度,这个和“线程池队列调优”有关系,也不能太低。尤其云服务器场景,受限于硬件资源的分配,别太低。云服务器也要考虑网络带宽,不能太低。否则,即便所谓各种检索技巧,也无处可施。比如:买个1核1GB的云服务器学生机,神仙也帮不了优化。

数据建模层面,做足文章。不推荐上来就直接优化DSL,因为某些情况,优化空间非常少。考虑字段层面是否最优化设置,字段类型是否设置合理;考虑有没有字段借助预处理 ingest pipeline 再继续拆分会不会更好;考虑所谓的多表关联,能不能不关联的宽表空间换时间实现。

复杂检索考虑优化点。耗费性能的检索,是否有替代方案。比如Wildcard能否通过 ngram 分词修改检索方式,能不用,尽量不用;如果使用 filter 过滤提升缓存性能的,是否使用;"profile:true"观察哪个环节出问题,有针对性的优化。

其他因素。检索时,是否有大量写入操作,查看是否还有优化空间;是否采取必要的段合并的策略,以优化检索;其他业务场景有针对性的调优。

3.Elasticsearch 集成与开发问题

3.1问题描述

如何在现有的 Web 应用程序中集成 Elasticsearch?

解释在微服务架构中如何利用 Elasticsearch 来提供搜索服务。

3.2问题回答

基本上说一下自己 Java 或者 Python层面集成  Elasticsearch 实践就可以。

比如:使用的 Java 官方客户端 Java-api(8.x),还是早期的 HighLevelREST API, 更早起的 LowLevelREST API 等。或者使用的 SpringBoot 相关的 API。

或者Python 框架下的 elasticsearch.py、elasticsearch-DSL等。

4.Elasticsearch DSL 相关应用选型等问题

4.1问题描述

你对 Elasticsearch Query DSL 有多熟悉?请给出一个你认为高效的查询例子。

使用 Elasticsearch DSL 编写一个可以处理模糊搜索和自动完成功能的查询。

4.2问题回答

4.2.1你对 Elasticsearch Query DSL 有多熟悉?请给出一个你认为高效的查询例子。

其实就说出 DSL 分类就可以:精确匹配查询(term、exists等)、全文检索(match、match_phrase 等)、Bool 组合检索(must、must_not、filter、should)等。

高效查询比如:基于 filter 的过滤缓存检索,性能比普通没有 filter 好很多,因为有效使用了缓存。

4.2.2使用 Elasticsearch DSL 编写一个可以处理模糊搜索和自动完成功能的查询。

模糊查询的含义,比如:match_phrase  和 slop 结合可以实现,比如:wildcard 可以实现,但有性能问题,比如:regex 正则检索可以实现,也有性能问题。

自动完成功能,需要沟通是不是自动补全功能,这点 ES 支持 auto complete 类似的 API——completion-suggester。

补充

[1] https://www.elastic.co/guide/en/elasticsearch/reference/8.12/search-suggesters.html#completion-suggester

[2]https://docs.elastic.co/search-ui/solutions/ecommerce/autocomplete 

[3]https://taranjeet.medium.com/elasticsearch-building-autocomplete-functionality-494fcf81a7cf 

[4]https://opster.com/guides/elasticsearch/how-tos/elasticsearch-auto-complete-guide/ 

[5]https://taranjeet.medium.com/elasticsearch-using-completion-suggester-to-build-autocomplete-e9c120cf6d87

5.Elasticsearch 索引数据同步相关问题

5.1问题描述

描述如何保证数据库和 Elasticsearch 索引间的数据同步。

你是如何处理批量索引和更新大量文档的?

5.2问题回答

5.2.1描述如何保证数据库和 Elasticsearch 索引间的数据同步

保证同步——我用 Logstash 多,主要基于时间戳和自增id实现同步。

这两种机制单纯自己实现方式都能有效保障同步。

如果出现同步异常,也可以通过两侧(源头、目的端)通过ID比对的方式进行排查和核实。

5.2.2你是如何处理批量索引和更新大量文档的?

批量索引——就是基于 bulk API 批量导入或者写入数据。

这里要注意的点就是:bulk 值不适宜上来调整的非常大,比如:上来就10万、100万等。

而是根据线程池和队列:逐步调大进行性能测试,不如:5000、10000、20000这种,直到找到性能接近瓶颈且合适的值即可。

更新大量文档——非必要不使用更新操作。

6.Elasticsearch 性能调优和索引维护相关问题

6.1问题描述

在开发过程中,你会如何处理 Elasticsearch 的索引碎片化?

有没有经验进行索引的映射迁移或重建?

6.2问题回答

6.2.1在开发过程中,你会如何处理 Elasticsearch 的索引碎片化?

索引碎片化不是专有词汇,ES 官方文档并没有这种称呼。需要核实多大是碎片。

这里,咱们推荐两个维度考虑这个问题。

  • 维度1:架构层面,单分片的最大值尽量控制在 30 GB- 50GB,过大了不便于维护,过小了性能会有影响。
  • 维度2:不定期在非业务密集区域实现段合并,以保证性能优化。
6.2.2有没有经验进行索引的映射迁移或重建?

看数据量大小

  • 如果数据量不大,直接 reindex 数据迁移;
  • 如果数据量适中,使用 reindex + slice 的方式迁移;
  • 如果数据过大,推荐 elasticdump(适合跨集群同步),索引快照和恢复的方式保障数据迁移的高可用性。
  • 如果跨集群,其实也可以使用:reindex, 但是要配置白名单。
  • 如果版本兼容,快照和恢复机制也是推荐的

7.Elasticsearch 错误处理和日志相关问题

7.1问题描述

如何处理 Elasticsearch 相关的异常和错误?

在你的开发工作中,你是如何进行日志记录和监控 Elasticsearch 行为的?

7.2问题回答

第一,不定期查看日志或者出了问题第一时间查看日志,普通日志会记录集群故障。比如:wildcard 出错,出问题日志能看到。

第二,必要时候,开启慢日志查询。比如:想知道哪个IP地址近期操作频繁,想知道近期哪个聚合比较拉胯。

第三,日志可视化,ELKB实现,日志通过logstash 同步到 Elasticsearch,并借助 Kibana 进行数据的可视化。

以上维度,保障集群问题及时发现也便于我们提前发现问题并解决问题。

8.Elasticsearch API使用和最佳实践相关问题

8.1问题描述

描述你使用Elasticsearch REST API时的一些最佳实践。

如何使用 Elasticsearch 的聚合 API来提取关键业务指标?

8.2问题回答

REST API 举例

  • 能用 filter 的咱们就走缓存过滤。
  • 将核心 API 脚本实现,监控内存使用率,磁盘使用率、CPU使用率,一旦出问题及时邮件预警。

聚合API:聚合核心就三个维度

  • Metric 指标聚合;
  • bucket 分桶聚合;
  • pipeline 基于聚合的子聚合。

三种方式都可以,需要结合业务灵活使用聚合方式。

9.Elasticsearch 安全性和权限控制相关问题

9.1问题描述

描述在应用程序中实现 Elasticsearch 安全性的策略。

你是如何在 Elasticsearch 中管理细粒度的访问控制?

9.2问题回答

9.2.1描述在应用程序中实现 Elasticsearch 安全性的策略

描述在应用程序中实现 Elasticsearch 安全性的策略?——针对这个问题,

我这边一般是 8.X 高版本,已经自带强调 SSL 证书访问,Kibana 也是安全配置的。

这样之后,Http访问就变成了 Https 访问。

那么在 Python 和 Java 客户端的程序访问也是需要把 Elasticsearch 配置的证书拷贝到给定的工程路径下的。

9.2.2你是如何在 Elasticsearch 中管理细粒度的访问控制?

ES 是能支持到字段级别,不过是收费功能。实际项目中我们使用的开源版本,并未使用这功能。

10.Elasticsearch 容错性和高可用性

10.1问题描述

你如何确保你开发的Elasticsearch应用具备高容错性?

当 Elasticsearch 集群不可用时,你的应用程序如何处理?

10.2问题回答

高容错性是否可以理解为高可用性,如果是高可用性策略

第一:副本策略,多节点集群至少一个副本,确保某个节点宕机后,副本提升为主分片,确保集群的高可用性。

但是,实践验证过,副本不是越多越好,副本越多,意味着牺牲的存储空间越大,一般数据量大的集群扛不住那么多的冗余存储。一般至少一个即可(个人理解的经验值)。除非极其高可用要求的场景,可以超过1个副本,其他不建议。

第二:集群的不定时快照和恢复策略,确保集群万一故障能恢复到某一个时刻的可用状态。

高版本支持 SLM快照生命周期管理功能,这一切的自动化和定时机制变得更加方便和快捷。

11.Elasticsearch 监控和警报机制

11.1问题描述

在开发过程中,你如何利用监控工具如 Elasticsearch 的 X-Pack 或其他插件来观察集群的健康状况?

你如何设置和处理与 Elasticsearch 相关的警报?

11.2问题回答

11.2.1在开发过程中,你如何利用监控工具如 Elasticsearch 的 X-Pack 或其他插件来观察集群的健康状况?

x-pack 插件高版本 7.X 版本已经集成,不再需要二次安装。

一般借助 kibana 的可视化,使用 Metricbeat 收集指标数据,同步到 Elasticsearch ,借助kibana 进行集群数据监控的可视化。

11.2.2你如何设置和处理与 Elasticsearch 相关的警报?

警报部分是收费功能,成本原因没有用。

不过第三方的 yelp 公司的开源 elasticalert 插件可以用和集成,不确认最新版本是否支持,早期版本用过。

还有,自己开发了必要的 python+shell 脚本,监控集群的健康状态,确保集群出现:cpu、磁盘、内存警戒线一到(自己定义的),就能第一时间收到预警邮件信息。

都是些Elasticsearch的面试分享,欢迎大家批评指正

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/8037.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android OpenMAX(四)OMX Core

假设我们已经写好了所有的OMX组件,有vdec、venc、adec、aenc,接下来问题来了,我们应该如何管理这些组件呢(创建、销毁)?这一篇文章我们向上一层学习OMX Core提供的标准API。 OMX Core代码位于 OMX_Core.h OMX Core在OpenMAX IL架构中的位置位于IL Client与实际的OMX组件之…

Spring+Vue的卓越托管中心管理系统的设计与实现+PPT+论文+讲解+售后

相比于以前的传统手工管理方式,智能化的管理方式可以大幅降低运营人员成本,实现了卓越托管中心管理系统的标准化、制度化、程序化的管理,有效地防止了卓越托管中心管理系统的随意管理,提高了信息的处理速度和精确度,能…

Junit单元测试框架

Junit单元测试框架 功能 可以用来对方法进行测试,它是第三方公司开源出来的(很多开发工具已经集成了Junit框架,比如IDEA) 优点 可以灵活的编写测试代码,可以针对某个方法执行测试,也支持一键完成对全部方法的自动化测试&#…

DI-engine强化学习入门(十又二分之一)如何使用RNN——数据处理、隐藏状态、Burn-in

一、数据处理 用于训练 RNN 的 mini-batch 数据不同于通常的数据。 这些数据通常应按时间序列排列。 对于 DI-engine, 这个处理是在 collector 阶段完成的。 用户需要在配置文件中指定 learn_unroll_len 以确保序列数据的长度与算法匹配。 对于大多数情况, learn_un…

神经网络极简入门

神经网络是深度学习的基础,正是深度学习的兴起,让停滞不前的人工智能再一次的取得飞速的发展。 其实神经网络的理论由来已久,灵感来自仿生智能计算,只是以前限于硬件的计算能力,没有突出的表现,直至谷歌的A…

mysql workbench如何导出insert语句?

进行导出设置 导出的sql文件 CREATE DATABASE IF NOT EXISTS jeesite /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */ /*!80016 DEFAULT ENCRYPTIONN */; USE jeesite; -- MySQL dump 10.13 Distrib 8.0.28, for Win64 (x86_64) -- -- Host: 127.0…

如何使用dockerfile文件将项目打包成镜像

要根据Dockerfile文件来打包一个Docker镜像,你需要遵循以下步骤。这里假设你已经安装了Docker环境。 1. 准备Dockerfile 确保你的Dockerfile文件已经准备就绪,并且位于你希望构建上下文的目录中。Dockerfile是一个文本文件,包含了用户可以调…

顺序表的实现(迈入数据结构的大门)(1)

什么是数据结构 数据结构是由:“数据”与“结构”两部分组成 数据与结构 数据:如我们所看见的广告、图片、视频等,常见的数值,教务系统里的(姓名、性别、学号、学历等等); 结构:当…

线性表--数据结构设计与操作

单链表 1.单链表的定义&#xff1a; typedef struct LNode{Elemtype data;struct Lnode *next; }LNode ,*LinkList;//单链表的数据结构&#xff08;手写&#xff09; #include<iostream> #include<vector> #include<algorithm>typedef int TypeElem; //单链表…

OpenAI API搭建的智能家居助手;私密大型语言模型(LLM)聊天机器人;视频和音频文件的自动化识别和翻译工具

✨ 1: GPT Home 基于Raspberry Pi和OpenAI API搭建的智能家居助手 GPT Home是一个基于Raspberry Pi和OpenAI API搭建的智能家居助手&#xff0c;功能上类似于Google Nest Hub或Amazon Alexa。通过详细的设置指南和配件列表&#xff0c;用户可以自行组装和配置这个设备&#x…

Ansible自动运维工具之playbook

一.inventory主机清单 1.定义 Inventory支持对主机进行分组&#xff0c;每个组内可以定义多个主机&#xff0c;每个主机都可以定义在任何一个或多个主机组内。 2.变量 &#xff08;1&#xff09;主机变量 [webservers] 192.168.10.14 ansible_port22 ansible_userroot ans…

使用sqlmodel实现唯一性校验

代码&#xff1a; from sqlmodel import Field, Session, SQLModel, create_engine# 声明模型 class User(SQLModel, tableTrue):id: int | None Field(defaultNone, primary_keyTrue)# 不能为空&#xff0c;必须唯一name: str Field(nullableFalse, uniqueTrue)age: int | …

Flutter弹窗链-顺序弹出对话框

效果 前言 弹窗的顺序执行在App中是一个比较常见的应用场景。比如进入App首页&#xff0c;一系列的弹窗就会弹出。如果不做处理就会导致弹窗堆积的全部弹出&#xff0c;严重影响用户体验。 如果多个弹窗中又有判断逻辑&#xff0c;根据点击后需要弹出另一个弹窗&#xff0c;这…

大数据Scala教程从入门到精通第五篇:Scala环境搭建

一&#xff1a;安装步骤 1&#xff1a;scala安装 1&#xff1a;首先确保 JDK1.8 安装成功: 2&#xff1a;下载对应的 Scala 安装文件 scala-2.12.11.zip 3&#xff1a;解压 scala-2.12.11.zip 4&#xff1a;配置 Scala 的环境变量 在Windows上安装Scala_windows安装scala…

(delphi11最新学习资料) Object Pascal 学习笔记---第11章第1节 (Weak 和 Unsafe 类型接口引用)

11.1.4 Weak 和 Unsafe 类型接口引用 ​ 从 Delphi 10.1 Berlin 开始&#xff0c;Object Pascal 语言对接口引用的管理进行了优化。实际上&#xff0c;Object Pascal 语言提供了不同类型的引用&#xff1a; 常规引用在分配和释放时分别递增和递减对象引用计数&#xff0c;最终…

控制元素隐藏

一、隐藏元素 在CSS中&#xff0c;有几种方法可以隐藏元素&#xff0c;每种方法都有其特定的用例和效果。以下是一些常用的CSS属性和技巧&#xff0c;用于隐藏元素&#xff1a; display: none; 这是最常用的隐藏元素的方法。它会将元素完全从文档流中移除&#xff0c;元素不会…

docker搭建代码审计平台sonarqube

docker搭建代码审计平台sonarqube 一、代码审计关注的质量指标二、静态分析技术分类三、sonarqube流程四、快速搭建sonarqube五、sonarqube scanner的安装和使用 一、代码审计关注的质量指标 代码坏味道 代码规范技术债评估 bug和漏洞代码重复度单测与集成 测试用例数量覆盖率…

node报错——解决Error: error:0308010C:digital envelope routines::unsupported——亲测可用

今天在打包vue2项目时&#xff0c;遇到一个报错&#xff1a; 最关键的代码如下&#xff1a; Error: error:0308010C:digital envelope routines::unsupportedat new Hash (node:internal/crypto/hash:80:19)百度后发现是node版本的问题。 在昨天我确实操作了一下node&…

Ansible——Playbook剧本

目录 一、Playbook概述 1.Playbook定义 2.Playbook组成 3.Playbook配置文件详解 4.运行Playbook 4.1Ansible-Playbook相关命令 4.2运行Playbook启动httpd服务 4.3变量的定义和引用 4.4指定远程主机sudo切换用户 4.5When——条件判断 4.6迭代 4.6.1创建文件夹 4.6.2…

[Linux][网络][TCP][四][流量控制][拥塞控制]详细讲解

目录 1.流量控制2.拥塞控制0.为什么要有拥塞控制&#xff0c;不是有流量控制么&#xff1f;1.什么是拥塞窗口&#xff1f;和发送窗口有什么关系呢&#xff1f;2.怎么知道当前网络是否出现了拥塞呢&#xff1f;3.拥塞控制有哪些算法&#xff1f;4.慢启动5.拥塞避免6.拥塞发生7.快…