当前位置: 首页 > article >正文

聊一聊Elasticsearch的索引数据搜索过程

与向索引写入数据的时候必须是主分片来承担不同。搜索的时候,主分片和副本分片均可以承担,最终选用主分片还是副本分片是通过轮询的方式来进行选择的。

索引数据的搜索过程,依据有无路由值,分为两种:不带路由值的搜索请求和带路由值的搜索请求。

1、不带路由值的搜索请求

因为没有路由值(等同于没有指定要搜索的分片),所以也就无法确定到底要搜索索引中的哪个分片。这样的话,就要将索引的所有分片都搜索一边。又由于分片的主分片和副本分片都能提供搜索服务,那到底使用哪个来搜索呢?针对这个问题,ES采用的是轮询的策略来进行选择的。

下面我们通过一张图来简单说下不带路由值的搜索过程是怎么样的?
在这里插入图片描述
整个搜索过程分为四步:

  1. 「节点1」接收到一个不携带路由值的搜索请求,「节点1」成为本次搜索请求的协调节点。
  2. 由于没有搜索请求中没有路由值,所以需要搜索索引的所有分片(通过轮询从每个分片的主分片和副本分片二选一),假设本次选择要搜索的分片为P0、P1·、P2。由于P1在「节点3」上,所以需要将搜索请求从「节点1」转发至「节点3」(通过传输模块来完成这个动作)。
  3. 分别从P0、P1、P2三个分片上进行搜索,每个分片会将搜索结果中的前10条作为局部结果,返回给协调节点(节点1)来处理。
  4. 协调节点(「节点1」)将返回的局部结果进行汇总,然后根据请求的参数来进行排序,最后将前10条(默认)数据作为最终的结果返回。

2、带路由值的搜索请求

由于搜索请求中有路由值,我们就可以通过这个路由值来确定要搜索的分片。

下面还是通过一张图来简单说下带路由值的搜索过程是怎么样的?
在这里插入图片描述
整个搜索过程分为三步:

  • 「节点1」接收到携带路由值的搜索请求,「节点1」成为本次搜索请求的协调节点。
  • 根据携带的路由值,确定要搜索的分片,假设要搜索分片1,通过轮询从分片1的P1(主分片)和R1(副本分片)选择一个,假设选择了P1。由于P1是在「节点3」上,所以协调节点(「节点1」)要将搜索请求通过传输模块转发至「节点3」。
  • 基于P1上的数据完成搜索,并将搜索结果排序后返回,默认会返回结果中的前10条数据。

3、参考文献

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

上一篇:《聊一聊Elasticsearch的索引分片的恢复机制》
下一篇:《聊一聊Elasticsearch的索引(1)》


http://www.kler.cn/a/404783.html

相关文章:

  • 国标GB28181视频平台EasyCVR视频融合平台H.265/H.264转码业务流程
  • 『 Linux 』文件与网络套接字的内部关系
  • 一键部署 200+ 开源软件的 Websoft9 面板,Github 2k+ 星星
  • 2024年中国无人机产业研究报告(附产业链图谱)
  • java Map 遍历 详解
  • 【Node.js】Node.js 和浏览器之间的差异
  • 前端数据可视化思路及实现案例
  • 鸿蒙多线程开发——线程间数据通信对象01
  • Flink学习连载文档第一篇--Flink集群的安装
  • Ubuntu24.04下的docker问题
  • 开源Tacchi 视触觉传感器仿真器,为机器人与物体接触仿真提供高质量的Sim2Real性能!
  • 241121学习日志——[CSDIY] [InternStudio] 大模型训练营 [11]
  • leetcode-18-四数之和
  • 【PDFBox】-初识
  • Java八股-MyBatis延迟加载
  • 提交git仓库时,如何关闭lint校验
  • 数据结构 (1)基本概念和术语
  • Easyexcel(4-模板文件)
  • 【QT - 1 - 】什么是QT?
  • LeetCode —— 字母异位词分组
  • Linux 定时任务全解析
  • Spring Cloud Alibaba、Spring Cloud 与 Spring Boot各版本的对应关系
  • 【docker】docker commit 命令 将当前容器的状态保存为一个新的镜像
  • RK3588开发笔记-sata概率性不能识别问题解决
  • 05_Spring JdbcTemplate
  • 【软件开发】如何理解异地多活?