聊一聊Elasticsearch的基本原理与形成机制

news2024/11/8 19:55:56

1、搜索引擎的基本原理

通常搜索引擎包括:数据采集、文本分析、索引存储、搜索等模块,它们之间的协作流程如下图:
在这里插入图片描述

  1. 数据采集模块负责采集需要搜索的数据源。

  2. 文本分析模块是将结构化数据中的长文本切分成有实际意义的词,这样用户把切分出来的词作为搜索条件就可以搜索到对应的文本了。

  3. 索引存储模块是将采集到的数据按着定义好的结构写入到索引。

    搜索引擎的索引数据是根据倒排索引来组织的。倒排索引中保存了每个词在索引中所在文档的编号以及文档中的所在位置,如下图: 在这里插入图片描述

  4. 搜索模块是根据用户的输入找到索引中匹配的文档。

2、Elasticsearch集群是如何形成的(形成机制)

2.1、主节点、主候选节点、投票配置

在讲ES集群如何形成(形成机制)之前,需要先介绍几个重要的概念:主节点、主候选节点、投票配置。

  1. 主节点(master node):每个集群有且只有一个主节点,主节点作为整个集群的管理者,维护着整个集群的元数据,当集群内的节点数量发生变化时更新集群状态并将状态发布给集群中的其他节点。同时还负责分片的分配。
  2. 主候选节点(master-eligible node):有权参与主节点选举的节点,即主节点的候选人名单。
  3. 投票配置(voting configuration):可参与投票的节点名单(即有投票权的节点)。通常与主候选节点的列表一致。在选举主节点的时候,只有得到投票配置中半数节点投票的节点才能称为主节点。

如果把主节点选举看成美国大选的话,那么主节点就是总统,主候选节点就是总统候选人,而投票配置就是选民,得到半数选民支持的总统候选人将成为下一任总统。

2.2 一个全新的Elasticsearch集群形成所经历的步骤

一个全新的ES集群启动的时候,需要通过集群节点的引导来把各自孤立的节点统一起来对外提供服务。这个集群节点的引导分为以下四个步骤:

  1. 初始化投票配置

    确定主候选节点的列表,并将主候选节点列表写入投票配置。

  2. 选举主节点

    有投票配置中的主候选节点发起主节点的选举,当超过一半的主候选节点达成一致,则主节点选举成功。

  3. 发现集群的其他节点

    节点尝试和节点上配置的主候选节点列表中节点进行连接,如果成功连接了则发起加入集群的申请,主节点确认连接成功后将该节点加入到集群中并修改集群的状态,然后将集群的最新状态发布到集群中的各个节点上。

    这里需要注意的是:节点上的配置的主候选节点列表中可能没有主节点,但是没关系,能通过列表中的节点间接的找到主节点,也同样让主节点将当前节点加入到集群中。

  4. 集群中的所有节点发现完毕后,就可以对外提供统一的服务了。

2.3 集群状态的发布过程

ES集群中的主节点更新完集群状态后,会将新的状态发布到集群中的其他节点上,这个过程有两个阶段:

  1. 预提交阶段:主节点将最新的集群状态发布给各节点,各节点接收到状态数据后保存到本地并向主节点发送确认响应。如下图: 在这里插入图片描述
  2. 正式提交阶段:如果主候选节点中中有一半的节点返回确认响应成功,那么将进入正式提交阶段。主节点通知所有节点应用最新的集群状态,每个节点应用最新的集群状态后,还会再向主节点发送最终确认响应。当所有的确认响应都成功时,本次状态发布完成。如下图:
    在这里插入图片描述

集群状态的发布是有时间限制的,如果主节点不能在规定时间内(默认为30秒)将集群状态发布成功,则需要重新选举出一个新的主节点。如果某个非主节点无法在规定时间内(默认为90秒)返回给主节点最终的确认响应,则主节点会认为该节点已经掉线,会将该节点从集群中移除。

主节点和非主节点会保持周期性的相互联系,即相互发送心跳检测包。如果某个非主节点多次心跳检测失败,则主节点会认为该节点已掉线,并将该节点从集群中移除。如果主节点掉线,则需要通过投票配置来选出一个新的主节点。

3、参考文献

  • 《Elasticsearch数据搜索与分析实战》——王深湛

上一篇:《聊一聊Elasticsearch的一些基本信息》
下一篇:《聊一聊Elasticsearch的索引的分片分配机制》

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

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

相关文章

IO流篇(一、File)

目录 一、学习前言 二、文件简介 三、文件使用 1. 绝对路径 vs 相对路径 2. 路径分隔符 3. 属性(字段) 4. 构造方法 5. 常用方法 5.1. 获取文件的相关信息 5.2. 判断功能 5.3. 新建和删除 5.4. 文件的获取 5.5. 重命名文件 四、文件使用练习…

【部署glm4】属性找不到、参数错误问题解决(思路:修改模型包版本)

前言:在部署glm时,遇到了一些属性找不到、参数错误的问题,通常遇到这种问题都是因为模型包版本问题导致的,要注意模型版本是否可用。 【运行官方vllm_cli_demo.py】报错 GLM-4: [rank0]: Traceback (most recent call last): [ran…

全双工通信协议WebSocket——使用WebSocket实现智能学习助手/聊天室功能

一.什么是WebSocket? WebSocket是基于TCP的一种新的网络协议。它实现了浏览器与服务器的全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输 HTTP 协议是一种无状态的、无连接的、单向的应用…

【Linux】冯诺依曼体系、再谈操作系统

目录 一、冯诺依曼体系结构: 1、产生: 2、介绍: 二、再谈操作系统: 1、为什么要管理软硬件资源: 2、操作系统如何进行管理: 3、库函数: 4、学习操作系统的意义: 一、冯诺依曼…

Linux的目录结构 | 命令的认识 | 相对路径 | 绝对路径 | 常用命令(一)

文章目录 1.Linux的目录结构2.命令的认识3.相对路径和绝对路径4.常用命令(目录文件操作)5.常用命令(文本查看) 1.Linux的目录结构 \ :根目录 root:root用户的工作目录 home:普通用户的工作目录 …

linux nvidia/cuda安装

1.查看显卡型号 lspci |grep -i vga2.nvidia安装 2.1在线安装 终端输入(当显卡插上之后,系统会有推荐的安装版本) ubuntu-drivers devices可得到如下内容 vendor : NVIDIA Corporation model : TU104GL [Tesla T4] driver : nvid…

简单又便宜的实现电脑远程开机唤醒方法

现有的远程开机方案 1)使用向日葵开机棒 缺点是比较贵一点,开机棒要一百多,而且查了评论发现挺多差评说不稳定,会有断联和无法唤醒的情况,而且设置也麻烦,还需要网卡支持WOL 2)使用远程开机卡 …

容器架构-Docker的成长之路

目录 1. 什么是容器 2. 容器 vs 虚拟机 3. Docker极速上手指南 环境准备 3.1 配置docker源 3.2 下载镜像加速的配置 3.3 下载自动补全工具 4. Docker C/S架构 5. Docker的镜像管理 5.1 下载nginx:alpine镜像并查看 5.2 sl大法 5.3 删除镜像 5.4 镜像清理用的命令 5…

【开源社区】ELK 磁盘异常占用解决及优化实践

1、问题及场景描述 本文主要讨论在 CentOS环境下基于 rpm 包部署 ELK 系统磁盘异常占用的问题解析和解决方案。 生产问题描述:以下问题现实场景基于ELK体系下,ES服务的磁盘占用问题解析。默认情况下,基于 RPM 安装的 Elasticsearch 服务的安…

仪表板展示|DataEase看中国:历年双十一电商销售数据分析

背景介绍 2024年“双十一”购物季正在火热进行中。自2009年首次推出至今,“双十一”已经成为中国乃至全球最大的购物狂欢节,并且延伸到了全球范围内的电子商务平台。随着人们消费水平的提升以及电子商务的普及,线上销售模式也逐渐呈现多元化…

【深度学习】论文笔记:空间变换网络(Spatial Transformer Networks)

博主简介:努力学习的22级计算机科学与技术本科生一枚🌸博主主页: Yaoyao2024往期回顾: 【机器学习】有监督学习由浅入深讲解分类算法Fisher算法讲解每日一言🌼: 今天不想跑,所以才去跑,这才是长…

基于java+SpringBoot+Vue的旅游管理系统设计与实现

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis Maven mysql5.7或8.0等等组成&#x…

【HarmonyOS】not supported when useNormalizedOHMUrl is not true.

【HarmonyOS】 not supported when useNormalizedOHMUrl is not true. 问题背景: 集成三方库编译时,IDE提示报错信息如下: hvigor ERROR: Bytecode HARs: [cashier_alipay/cashiersdk] not supported when useNormalizedOHMUrl is not true…

如何对LabVIEW软件进行性能评估?

对LabVIEW软件进行性能评估,可以从以下几个方面着手,通过定量与定性分析,全面了解软件在实际应用中的表现。这些评估方法适用于确保LabVIEW程序的运行效率、稳定性和可维护性。 一、响应时间和执行效率 时间戳测量:使用LabVIEW的时…

gitlab项目如何修改主分支main为master,以及可能遇到的问题

如果你希望将 Git 仓库的主分支名称从 main 修改为 master: 1. 本地修改分支名称 首先,切换到 main 分支: git checkout main将 main 分支重命名为 master: git branch -m main master2. 更新远程仓库 将本地更改推送到远程仓库…

(六千字心得笔记)零基础C语言入门第八课——函数(上)

文章目录 一、函数的概念1.1 函数的概念 二、库函数2.1 标准库和头文件2.2 库函数的使用方法sqrt函数(举例)功能包含的头文件实践2.2.4 库函数文档的一般格式 三、自定义函数3.1 自定义函数的语法形式3.2 函数的举例 四、形参和实参4.1 实参4.1 形参4.3 …

案例精选 | 河北省某检察院安全运营中异构日志数据融合的实践探索

河北省某检察院是当地重要的法律监督机构,肩负着维护法律尊严和社会公平正义的重要职责。该机构依法独立行使检察权,负责对犯罪行为提起公诉,并监督整个诉讼过程,同时积极参与社会治理,保护公民权益,推动法…

DBAPI连接阿里云 maxcompute 报错

使用正确的驱动包 访问以下链接寻找驱动包 https://github.com/aliyun/aliyun-odps-jdbc/releases/tag/v3.4.3 注意要使用odps-jdbc-3.4.3-jar-with-dependencies.jar ,这个是完整的jar包 不要使用odps-jdbc-3.4.3.jar,这个不是完整的,它还…

【MongoDB】MongoDB的Java API及Spring集成(Spring Data)

文章目录 Java APISpring 集成1. 添加依赖2. 配置 MongoDB3. 创建实体类4. 创建 Repository 接口5. 创建 Service 类6. 创建 Controller 类7. 启动 Spring Boot 应用8. 测试你的 API 更多相关内容可查看 Java API maven <dependency><groupId>org.mongodb</gr…

2-Ubuntu/Windows系统启动盘制作

学习目标&#xff1a; 掌握使用Win32DiskImager、Rufus等工具制作系统启动盘的基本步骤。独立将ISO镜像文件写入USB闪存驱动器&#xff0c;确保在需要时顺利安装或修复系统。通过学习如何选择正确的源文件和目标驱动器&#xff0c;理解启动盘的使用场景和注意事项&#xff0c;…