ES面试题系列「一」

news2025/5/12 22:16:40

1、Elasticsearch 是什么?它与传统数据库有什么区别?

答案:Elasticsearch 是一个基于 Lucene 的分布式、开源的搜索和分析引擎,主要用于处理大量的文本数据,提供快速的搜索和分析功能。与传统数据库相比,ES 更侧重于全文搜索和实时数据分析,数据以 JSON 格式存储,具有更好的扩展性和灵活性,而传统数据库擅长事务处理和结构化数据的存储与查询。

2、什么是倒排索引?它是如何工作的?

答案:倒排索引是 Elasticsearch 的核心数据结构。它从词出发,记载了每个词在哪些文档中出现过,由词典和倒排表组成。在构建倒排索引时,会对文档进行分词处理,将文档拆分成词条,然后建立词条与文档 ID 的映射关系。查询时,通过查找词条在倒排索引中的位置,快速定位到包含该词条的文档。

3、Elasticsearch 中的索引、文档和字段分别是什么?

答案:索引类似于关系数据库中的数据库,是具有相同结构的文档的集合;文档是 ES 中最小的存储单位,相当于关系数据库中的一条记录,以 JSON 格式存储;字段是文档中的属性,类似于关系数据库中的列,每个字段都有其数据类型。

4、如何理解 Elasticsearch 中的分片和副本?

答案:分片是为了提高 ES 的存储和查询性能,将索引分成多个部分,分布在不同的节点上。副本是每个分片的备份,用于提高可用性和容错性,当主分片出现故障时,副本可以替代主分片提供服务。合理设置分片和副本数量可以平衡系统的性能、可用性和成本。

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

答案:前置前提是只有候选主节点(master:true)的节点才能成为主节点,并且要满足最小主节点数(min_master_nodes)以防止脑裂。选举流程大致为:第一步,确认候选主节点数达标,即满足 elasticsearch.yml 设置的 discovery.zen.minimum_master_nodes 的值;第二步,比较节点,先判定是否具备 master 资格,具备候选主节点资格的优先返回;若两节点都为候选主节点,则 id 小的值会成为主节点,这里的 id 为 string 类型。

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

答案:第一步,客户端向集群中的某节点写入数据,发送请求,如果没有指定路由 / 协调节点,请求的节点扮演路由节点的角色;第二步,节点接收到请求后,使用文档_id 来确定文档属于哪个分片,请求会被转到对应的主分片所在节点;第三步,主分片所在节点在主分片上执行写操作,如果成功,则将请求并行转发到其他副本分片上,等待结果返回。所有的副本分片都报告成功后,主分片所在节点将向协调节点报告成功,协调节点再向请求客户端报告写入成功。

7、Elasticsearch 的查询流程是怎样的?

答案:首先,客户端发送搜索请求,请求中包含查询条件、索引名称等信息。Elasticsearch 根据搜索请求中指定的索引名称和查询条件,确定哪些分片包含符合查询条件的文档数据,然后并行地向这些分片发送搜索请求,每个分片在本地执行相应的查询操作并返回部分结果。接着,Elasticsearch 将这些部分结果汇总起来,并根据查询要求对结果进行排序,最后将搜索结果返回给客户端。

8、在 Elasticsearch 中,如何进行索引数据的调优?

答案:可以从设计阶段、写入阶段、查询阶段等方面进行调优。设计阶段,根据业务增量需求,采取基于日期模板创建索引,使用别名进行索引管理,合理设置分词器,充分考虑字段属性等;写入阶段,写入前可将副本数设置为 0,关闭 refresh_interval,写入过程中采用 bulk 批量写入,写入后恢复副本数和刷新间隔,尽量使用自动生成的 id;查询阶段,禁用 wildcard 和批量 terms,充分利用倒排索引机制,能使用 keyword 类型尽量使用 keyword,数据量大时先基于时间敲定索引再检索,设置合理的路由机制等。

9、什么是 Elasticsearch 中的 Mapping?它有什么作用?

答案:Mapping 定义了文档的结构,包括字段的数据类型、索引方式、分析器等信息。它的作用是告诉 Elasticsearch 如何解析和存储文档中的数据,以及如何对字段进行索引和搜索,确保数据能够被正确地处理和查询。

10、Elasticsearch 支持哪些数据类型?

答案:常见的数据类型有文本类型(text)、关键字类型(keyword)、日期类型(date)、数值类型(如 integer、long、float、double 等)、布尔类型(boolean),还有二进制类型(binary)、地理空间类型(geo - point、geo - shape)等。

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

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

相关文章

【音视频工具】MP4BOX使用

这里写目录标题 使用介绍 使用 下面这个网站直接使用: MP4Box.js - JavaScript MP4 Reader/Fragmenter (gpac.github.io) 介绍 MMP4Box 是 GPAC 项目开发的一款命令行工具,专门用于处理 MP4 格式多媒体文件,也可操作 AVI、MPG、TS 等格…

Linux中常见开发工具简单介绍

目录 apt/yum 介绍 常用命令 install remove list vim 介绍 常用模式 命令模式 插入模式 批量操作 底行模式 模式替换图 vim的配置文件 gcc/g 介绍 处理过程 预处理 编译 汇编 链接 库 静态库 动态库(共享库) make/Makefile …

flow-matching 之学习matcha-tts cosyvoice

文章目录 matcha 实现cosyvoice 实现chunk_fmchunk_maskcache_attn stream token2wav 关于flow-matching 很好的原理性解释文章, 值得仔细读,多读几遍,关于文章Flow Straight and Fast: Learning to Generate and Transfer Data with Rectifi…

ubuntu22.04在 Docker容器中安装 ROS2-Humble

22.04 安装 docker 容器并实现rviz功能 1 docker pull命令拉取包含ROS-Humble的镜像: docker pull osrf/ros:humble-desktop-full-jammy docker images验证该镜像是否拉取成功。 使用镜像osrf/ros:humble-desktop-full-jammy创建并运行容器 sudo docker run -it…

【JavaWeb+后端常用部件】

回顾内容看: 一、获取请求参数的方法 参考:[JavaWeb]——获取请求参数的方式(全面!!!)_java 获取请求参数-CSDN博客 Json格式的Body加备注RequestBody{id}动态路径加备注PathVariableid?&name?直接接收就好 i…

Redis 重回开源怀抱:开源精神的回归与未来展望

在开源软件的广袤天地里,Redis 一直是备受瞩目的明星项目。近期,Redis 宣布重新回归开源,这一消息犹如一颗石子投入平静的湖面,在技术社区激起层层涟漪。今天,就让我们深入了解 Redis 这一重大转变背后的故事、意义以及…

弹窗表单的使用,基于element-ui二次封装

el-dialog-form 介绍 基于element-ui封装的弹窗式表单组件 示例 git地址 https://gitee.com/chenfency/el-dialog-form.git 更新日志 2021-8-12 版本1.0.0 2021-8-17 优化组件,兼容element原组件所有Attributes及Events 2021-9-9 新增tip提示 安装教程 npm install …

实践005-Gitlab CICD全项目整合

文章目录 环境准备环境准备集成Kubernetes Gitlab CICD项目整合项目整合整合设计 后端Java项目部署后端Java项目静态检查后端Java项目镜像构建创建Java项目部署文件创建完整流水线 前端webui项目部署前端webui项目镜像构建创建webui项目部署文件创建完整流水线 构建父子类型流水…

懒人美食帮SpringBoot订餐系统开发实现

概述 快速构建一个订餐系统,今天,我们将通过”懒人美食帮”这个基于SpringBoot的订餐系统项目,为大家详细解析从用户登录到多角色权限管理的完整实现方案。本教程特别适合想要学习企业级应用开发的初学者。 主要内容 1. 用户系统设计与实现…

MySQL 从入门到精通(六):视图全面详解 —— 虚拟表的灵活运用

在数据库开发中,我们经常需要重复执行复杂的多表查询,或是需要限制用户只能访问特定数据。这时候,MySQL 的 视图(View)就能大显身手。作为一种 “虚拟表”,视图不存储实际数据,却能基于 SQL 查询…

手机隐私数据彻底删除工具:回收或弃用手机前防数据恢复

软件介绍 有这样一款由吾爱网友chenwangjun 原创开发的数据处理软件,名为 AndroidDiskClear。它的核心功能十分强大,能够将你手机里已经删除的各类文件,像图片、普通文件、文字信息等彻底清除干净,有效杜绝数据恢复类软件的二次恢…

数据压缩实现案例

在driver中修改代码 package com.root.mapreduce.compress; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.…

FlySecAgent:——MCP全自动AI Agent的实战利器

最近,出于对人工智能在网络安全领域应用潜力的浓厚兴趣,我利用闲暇时间进行了深入研究,并成功开发了一款小型轻量化的AI Agent安全客户端FlySecAgent。 什么是 FlySecAgent? 这是一个基于大语言模型和MCP(Model-Contr…

ideal创建Springboot项目(Maven,yml)

以下是使用 IntelliJ IDEA 创建基于 Maven 的 Spring Boot 项目并使用 YAML 配置文件的详细步骤: 一、创建 Spring Boot 项目 启动项目创建向导 打开 IntelliJ IDEA,点击“File”->“New”->“Project”。 在弹出的“New Project”窗口中&#…

Pycharm(十九)深度学习

一、深度学习概述 1.1 什么是深度学习 深度学习是机器学习中的一种特殊方法,它使用称为神经网络的复杂结构,特别是“深层”的神经网络,来学习和做出预测。深度学习特别适合处理大规模和高维度的数据,如图像、声音和文本。深度学习、机器学习和人工智能之间的关系如下图所…

Scrapyd 详解:分布式爬虫部署与管理利器

Scrapyd 是 Scrapy 官方提供的爬虫部署与管理平台,支持分布式爬虫部署、定时任务调度、远程管理爬虫等功能。本文将深入讲解 Scrapyd 的核心功能、安装配置、爬虫部署流程、API 接口使用,以及如何结合 Scrapy-Redis 实现分布式爬虫管理。通过本文&#x…

驱动开发硬核特训 · 专题篇:Vivante GPU 与 DRM 图形显示体系全解析(i.MX8MP 平台实战)

视频教程请关注 B 站:“嵌入式Jerry”。 一、背景导读:GPU 与 DRM 到底谁负责“显示”? 在嵌入式 Linux 图形系统中,“画面怎么显示出来”的问题,表面看似简单,实则涉及多个内核子系统与用户态组件的协同&…

C——猜数字游戏

前面我们已经学习了C语言常见概念,数据类型和变量以及分置于循环的内容,现在我们可以将这些内容结合起来写一个有趣的小游戏。下面正式开始我们今天的主题——猜数字游戏的实现。 猜数字游戏的要求: 1.电脑自动生成1~100的随机数。 2.玩家…

C/C++实践(三)深入理解 C++ 三大特性之一:封装

一、封装的概念与核心思想 封装(Encencapsulation)是 C 面向对象编程(OOP)的三大核心特性之一,其本质是将数据(成员变量)和对数据的操作(成员函数)捆绑在一个逻辑单元&a…

1、RocketMQ 核心架构拆解

1. 为什么要使用消息队列? 消息队列(MQ)是分布式系统中不可或缺的中间件,主要解决系统间的解耦、异步和削峰填谷问题。 解耦:生产者和消费者通过消息队列通信,彼此无需直接依赖,极大提升系统灵…