聊一聊Elasticsearch的基本原理与形成机制
1、搜索引擎的基本原理
通常搜索引擎包括:数据采集、文本分析、索引存储、搜索等模块,它们之间的协作流程如下图:

-
数据采集模块负责采集需要搜索的数据源。
-
文本分析模块是将结构化数据中的长文本切分成有实际意义的词,这样用户把切分出来的词作为搜索条件就可以搜索到对应的文本了。
-
索引存储模块是将采集到的数据按着定义好的结构写入到索引。
搜索引擎的索引数据是根据倒排索引来组织的。倒排索引中保存了每个词在索引中所在文档的编号以及文档中的所在位置,如下图:

-
搜索模块是根据用户的输入找到索引中匹配的文档。
2、Elasticsearch集群是如何形成的(形成机制)
2.1、主节点、主候选节点、投票配置
在讲ES集群如何形成(形成机制)之前,需要先介绍几个重要的概念:主节点、主候选节点、投票配置。
- 主节点(master node):每个集群有且只有一个主节点,主节点作为整个集群的管理者,维护着整个集群的元数据,当集群内的节点数量发生变化时更新集群状态并将状态发布给集群中的其他节点。同时还负责分片的分配。
- 主候选节点(master-eligible node):有权参与主节点选举的节点,即主节点的候选人名单。
- 投票配置(voting configuration):可参与投票的节点名单(即有投票权的节点)。通常与主候选节点的列表一致。在选举主节点的时候,只有得到投票配置中半数节点投票的节点才能称为主节点。
如果把主节点选举看成美国大选的话,那么主节点就是总统,主候选节点就是总统候选人,而投票配置就是选民,得到半数选民支持的总统候选人将成为下一任总统。
2.2 一个全新的Elasticsearch集群形成所经历的步骤
一个全新的ES集群启动的时候,需要通过集群节点的引导来把各自孤立的节点统一起来对外提供服务。这个集群节点的引导分为以下四个步骤:
-
初始化投票配置
确定主候选节点的列表,并将主候选节点列表写入投票配置。
-
选举主节点
有投票配置中的主候选节点发起主节点的选举,当超过一半的主候选节点达成一致,则主节点选举成功。
-
发现集群的其他节点
节点尝试和节点上配置的主候选节点列表中节点进行连接,如果成功连接了则发起加入集群的申请,主节点确认连接成功后将该节点加入到集群中并修改集群的状态,然后将集群的最新状态发布到集群中的各个节点上。
这里需要注意的是:节点上的配置的主候选节点列表中可能没有主节点,但是没关系,能通过列表中的节点间接的找到主节点,也同样让主节点将当前节点加入到集群中。
-
集群中的所有节点发现完毕后,就可以对外提供统一的服务了。
2.3 集群状态的发布过程
ES集群中的主节点更新完集群状态后,会将新的状态发布到集群中的其他节点上,这个过程有两个阶段:
- 预提交阶段:主节点将最新的集群状态发布给各节点,各节点接收到状态数据后保存到本地并向主节点发送确认响应。如下图:

- 正式提交阶段:如果主候选节点中中有一半的节点返回确认响应成功,那么将进入正式提交阶段。主节点通知所有节点应用最新的集群状态,每个节点应用最新的集群状态后,还会再向主节点发送最终确认响应。当所有的确认响应都成功时,本次状态发布完成。如下图:

集群状态的发布是有时间限制的,如果主节点不能在规定时间内(默认为30秒)将集群状态发布成功,则需要重新选举出一个新的主节点。如果某个非主节点无法在规定时间内(默认为90秒)返回给主节点最终的确认响应,则主节点会认为该节点已经掉线,会将该节点从集群中移除。
主节点和非主节点会保持周期性的相互联系,即相互发送心跳检测包。如果某个非主节点多次心跳检测失败,则主节点会认为该节点已掉线,并将该节点从集群中移除。如果主节点掉线,则需要通过投票配置来选出一个新的主节点。
3、参考文献
- 《Elasticsearch数据搜索与分析实战》——王深湛
上一篇:《聊一聊Elasticsearch的一些基本信息》
下一篇:《聊一聊Elasticsearch的索引的分片分配机制》
相关文章:
聊一聊Elasticsearch的基本原理与形成机制
1、搜索引擎的基本原理 通常搜索引擎包括:数据采集、文本分析、索引存储、搜索等模块,它们之间的协作流程如下图: 数据采集模块负责采集需要搜索的数据源。 文本分析模块是将结构化数据中的长文本切分成有实际意义的词,这样用户…...
应急救援无人车:用科技守护安全!
一、核心功能 快速进入危险区域: 救援无人车能够迅速进入地震、火灾、洪水等自然灾害或重大事故的现场,这些区域往往对人类救援人员构成极大威胁。 通过自主导航和环境感知技术,无人车能够避开危险区域,确保自身安全的同时&…...
详解Java之Spring MVC篇二
目录 获取Cookie/Session 理解Cookie 理解Session Cookie和Session的区别 获取Cookie 获取Session 获取Header 获取User-Agent 获取Cookie/Session 理解Cookie HTTP协议自身是“无状态”协议,但是在实际开发中,我们很多时候是需要知道请求之间的…...
flutter鸿蒙next 使用 InheritedWidget 实现跨 Widget 传递状态
在 Flutter 中,状态管理是开发过程中一个至关重要的部分。Flutter 提供了多种方式来实现组件间的状态传递,其中一种比较底层的方式是使用 InheritedWidget。虽然 InheritedWidget 主要用于将数据传递给其子树中的小部件,但它也是许多更高级状…...
计算机的错误计算(一百四十六)
摘要 探讨 MATLAB 中正切函数 tan(x)、余切函数 cot(x) 关于 附近数的计算精度问题。 例1. 已知 计算 直接贴图吧: 另外,16位的正确值分别为 -0.7837941516239115e10、-0.1275845192169577e-9、0.4782331334117711e7 与 0.2091030357653982e-…...
国标GB28181视频平台EasyCVR私有化视频平台工地防盗视频监控系统方案
一、方案背景 在当代建筑施工领域,安全监管和防盗监控是保障工程顺利进行和资产安全的关键措施。随着科技进步,传统的监控系统已不足以应对现代工地的安全挑战。因此,基于国标GB28181视频平台EasyCVR的工地防盗视频监控系统应运而生…...
CUDA系统学习之一软件堆栈架构
一、CPU与GPU体系架构 计算单元分布 CPU: 少量强大的ALU(算术逻辑单元),通常4-8个核心GPU: 大量小型ALU,成百上千个计算核心特点:GPU更适合并行计算,可以同时处理大量数据控制单元(Control) CPU: 较大的控制单元,复杂的…...
SpringBoot项目中替换指定版本的tomcat
需求:项目使用的SpringBoot框架,因低版本的tomcat的有安全漏洞,根据安全要求需要将项目的tomcat版本升级到9.0.89以上版本。 解决办法: 1、在pom.xml中排除SpringBoot的默认tomcat依赖; <dependency><groupId…...
【5.10】指针算法-快慢指针将有序链表转二叉搜索树
一、题目 给定一个单链表,其中的 元素按升序排序 ,将其转换为 高度平衡的二叉搜索树 。 本题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。 示例: 给定的有序链表: [ -10 , -3 , 0 , …...
机器学习—前向传播的一般实现
可以写一个函数来实现一个密集的层,那是神经网络的单层,所以定义稠密函数,它将上一层的激活作为输入以及给定层神经元的参数w和b。看下边图片所展示的例子,把所有这些权重向量堆叠成一个矩阵,wnp.array([[1,-3,5][2,4,…...
极狐GitLab 签约足下科技,加速国产智驾操作系统的发展与普及
客户背景 足下科技是一家致力于成为智能汽车软件平台、产品与服务领导者的高科技企业,成立于 2022年 3 月,总部位于深圳市。足下科技自主研发的智能驾驶操作系统 Earth 和 Air 工具链,协助OEM和Tier1厂商降低算法和软件开发难度,…...
20241102在荣品PRO-RK3566开发板的预置Android13下适配宸芯的数传模块CX6603N
20241102在荣品PRO-RK3566开发板的预置Android13下适配宸芯的数传模块CX6603N 2024/11/2 18:04 在WIN10使用程序:ViewLink-4.0.7_0708-windows-x64.exe 在荣品PRO-RK3566开发板的预置Android13下使用:ViewLink-2023_12_21-release-0.2.6.apk adb install…...
力扣(leetcode)题目总结——哈希表篇
leetcode 经典题分类 链表数组字符串哈希表二分法双指针滑动窗口递归/回溯动态规划二叉树辅助栈 本系列专栏:点击进入 leetcode题目分类 关注走一波 前言:本系列文章初衷是为了按类别整理出力扣(leetcode)最经典题目,…...
AWS RDS Oracle hit ORA-39405
报错信息: ORA-39405: Oracle Data Pump does not support importing from a source database with TSTZ version 42 into a target database with TSTZ version 35. 分析过程: 这个报错是由于timezone_file的版本,源端比目标端高…...
Dinky中配置Flink集群
需要启动yarn-session 进程,在集群服务器 cd /pwd//flink/bin yarn-session -d 启动成功后可以在yarn的资源管理队列进行查看 启动成功后会给出:JobManager Web Interface 在dinky中进行配置: 集群配置 Hadoop 配置: H…...
通讯录(C 语言)
目录 一、通讯录设计思路1. 伪代码设计思路2. 代码设计思路 二、代码实现三、程序运行演示四、整体分析 一、通讯录设计思路 1. 伪代码设计思路 通讯录可以用来存储 100 个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址。 提供方法&#x…...
对比Java和TypeScript中的服务注册和查找机制
文章目录 一、Java中的服务注册和查找二、TypeScript中的服务注册和查找2.1 使用依赖注入(DI)框架2.2 injectable原理2.3 使用TypeScript的反射系统实现依赖注入 三、优缺点分析3.1 Java的ServiceLoader3.2 TypeScript的服务注册和查找 四、结论 在构建大…...
Flutter 主流常用第三方库、插件收集
一、Flutter 学习资料 FlutterFlutter官网Flutter中文网咸鱼技术掘金Flutter专栏 Flutter - Dart中(.)、(..)、(...)语法使用_flutter ...-CSDN博客 Flutter pubspec.yaml 配置文件_flutter yaml配置git-CSDN博客 Flutter 添加 example流程_建flutter 工程 怎么自动有example-C…...
【在Linux世界中追寻伟大的One Piece】多路转接select
目录 1 -> I/O多路转接之select 1.1 -> 初识select 1.2 -> select函数原型 1.3 -> 关于fd_set结构 1.4 -> 关于timeval结构 2 -> 理解select执行过程 2.1 -> Socket就绪条件 2.2 -> select特点 2.3 -> select缺点 3 -> select使用示例…...
补一下 二维 平面直角坐标系 到三维
上一篇帖子写到 二维的平面直角坐标系,是那样的,这次补充一下三维的。首先需要,安装一个包,如下: 然后,把参数输入,输入这个坐标系的参数,如下: 这样就可以输出如下的三…...
宇视NVR接入AS-V1000平台全流程指南(含SDK端口配置避坑)
宇视NVR对接AS-V1000平台实战手册:从配置到排障的深度解析 当监控系统需要整合多品牌设备时,宇视NVR与AS-V1000平台的对接成为典型场景。不同于标准化的协议对接,SDK接入方式往往隐藏着诸多"暗礁"——从端口冲突到能力集匹配&#…...
别再手动复制粘贴了!用CubeMX一键生成FreeRTOS工程(STM32F4 HAL库实战)
告别繁琐配置:STM32CubeMXFreeRTOS全自动工程生成指南 在嵌入式开发领域,时间就是竞争力。传统FreeRTOS移植需要手动复制文件、配置路径、修改中断向量表,稍有不慎就会陷入头文件缺失、链接错误的泥潭。现在,STM32CubeMX的图形化…...
找不到api-ms-win-core-path-l1-1-0.dll的官方解决方法(2026更新)
我是一名企业的IT桌面支持,平时处理得最多的就是员工电脑上五花八门的软件报错。最近,api-ms-win-core-path-l1-1-0.dll缺失的工单量激增,尤其在Windows 7系统的电脑上。很多同事第一反应是去网上搜这个文件下载,但这恰恰是IT运维…...
YOLO X Layout案例集:10类典型文档(发票/简历/论文/合同/说明书)Layout识别效果汇总
YOLO X Layout案例集:10类典型文档Layout识别效果汇总 获取更多AI镜像 想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署…...
在Windows 11上用VirtualBox搞定WRF-Hydro 5.2.0:一个水文模型小白的Ubuntu 22.04虚拟机避坑实录
在Windows 11上用VirtualBox搞定WRF-Hydro 5.2.0:一个水文模型小白的Ubuntu 22.04虚拟机避坑实录 第一次接触WRF-Hydro时,我盯着满屏的命令行代码和复杂的依赖关系,感觉像在破解某种外星密码。作为一名水文专业的研究生,我的Linux…...
前端开发者必看:5个提升AI提示词效果的实战技巧(附代码示例)
前端开发者必看:5个提升AI提示词效果的实战技巧(附代码示例) 当ChatGPT帮你生成React组件却总跑偏,当Copilot给出的代码建议总差那么点意思——作为前端开发者,你可能已经意识到:AI工具的表现力,…...
基于OFA的智能写作助手:图文内容自动生成与问答
基于OFA的智能写作助手:图文内容自动生成与问答 1. 引言 你有没有遇到过这样的情况:手头有一堆产品图片,却不知道怎么写吸引人的商品描述;或者看到一张复杂的图表,想要快速提取关键信息却无从下手;又或者…...
Qwen3-0.6B-FP8模型服务化:使用Git进行版本管理与CI/CD集成
Qwen3-0.6B-FP8模型服务化:使用Git进行版本管理与CI/CD集成 1. 引言 咱们做AI模型部署的,是不是经常遇到这种烦心事:好不容易把模型服务调通了,过两天想加点新功能,结果发现原来的配置参数、客户端代码、甚至API封装…...
为什么92%的Java边缘项目因Classloader泄漏失败?揭秘3层隔离沙箱设计与实时热替换机制
第一章:Java边缘计算轻量级运行时开发概览边缘计算场景对运行时环境提出严苛要求:低内存占用(通常 ≤ 64MB)、毫秒级冷启动、有限依赖、原生支持资源约束设备(如 ARM64 IoT 网关、工业 PLC)。Java 生态传统…...
2023最新免费天气预报API接口推荐与使用指南
1. 2023年最值得尝试的免费天气预报API 天气预报API已经成为开发者工具箱里的常备工具,无论是做旅行App、外卖配送系统还是智能家居设备,实时天气数据都扮演着关键角色。我最近在开发一个户外运动提醒功能时,把市面上主流的免费天气接口都试了…...
