聊一聊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)》

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

视频修复技术和实时在线处理

什么是视频修复? 视频修复技术的目标是填补视频中的缺失部分,使视频内容连贯合理。这项技术在对象移除、视频修复和视频补全等领域有着广泛的应用。传统方法通常需要处理整个视频,导致处理速度慢,难以满足实时处理的需求。 技术发…

自动化运维-检测Linux服务器CPU、内存、负载、IO读写、机房带宽和服务器类型等信息脚本

前言:以上脚本为今年8月1号发布的,当时是没有任何问题,但现在脚本里网络速度测试py文件获取不了了,测速这块功能目前无法实现,后面我会抽时间来研究,大家如果有建议也可以分享下。 脚本内容: #…

C语言-11-18笔记

1.C语言数据类型 类型存储大小值范围char1 字节-128 到 127 或 0 到 255unsigned char1 字节0 到 255signed char1 字节-128 到 127int2 或 4 字节-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647unsigned int2 或 4 字节0 到 65,535 或 0 到 4,294,967,295short2 字节…

【HashMap篇】HashMap实现原理|put方法|扩容机制|寻址算法|1.7情况下的多线程死循环问题

目录 一、二叉树、红黑树、散列表简单介绍 1.二叉树 (1)什么是二叉树 (2)什么是二叉搜索树 2.红黑树 (1)什么是红黑树 3.散列表 (1)什么是散列表 (2)…

AI 大模型重塑软件开发的未来

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

idea 配置 leetcode插件 代码模版

开启自定义模版 codeFileName: $!velocityTool.camelCaseName(${question.titleSlug})Code Template: ${question.content} package leetcode.editor.cn; /*** ${question.title}* author lww* since $!velocityTool.date()*/ public class $!velocit…

微软Microsoft有许多耳熟能详的软件?

微软有许多耳熟能详的软件,以下是一些比较有代表性的: 一、软件类 操作系统: Windows 系列:这是微软最为著名且广泛使用的操作系统,如 Windows 10、Windows 11 等。它为全球绝大多数个人电脑提供了操作平台&#xff0c…

Confluence|Confluence报错:连接MySQL数据库失败

报错信息:Problem connecting to your database 解决方案: 增加一个mysql驱动jar包到容器内部 docker cp ./mysql-connector-java-8.0.19.jar confluence:/opt/atlassian/confluence/confluence/WEB-INF/lib/ 作者:Kkoo 链接:ht…

扣子(Coze):构建智能助手并嵌入个人网站的新选择

首发地址(欢迎大家访问):扣子(Coze):构建智能助手并嵌入个人网站的新选择 1. 前言 之前写了一篇关于使用 MaxKB 搭建个人知识库并集成到个人网站的博客; 整个技术路线我觉得还是很好的&#x…

LeetCode - #139 单词拆分

文章目录 前言摘要1. 描述2. 示例3. 答案题解动态规划的思路代码实现代码解析1. **将 wordDict 转换为 Set**2. **初始化 DP 数组**3. **状态转移方程**4. **返回结果** **测试用例**示例 1:示例 2:示例 3: 时间复杂度空间复杂度总结关于我们 前言 本题由于没有合适答案为以往遗…

SpringCloud篇(服务保护 - Sentinel)

目录 一、雪崩问题及解决方案 1. 雪崩问题 2. 解决方案 方案一:超时处理 方案二:仓壁模式 方案三:断路器模式 方案四:限流 3. 总结 二、服务保护技术对比 三、Sentinel介绍与安装 1. 初识Sentinel 2. Sentinel 优势 3…

MACOS开发、使用常见问题汇总

MACOS常见问题 本文记录使用macos遇到的常见问题,后面会持续更新,觉得有用的可以收藏一下。 打不开xxx.app,因为它来自身份不明的开发者解决方法(开启任何来源) 打开终端(Terminal)程序 拷贝sudo spctl --master-di…

网络安全之国际主流网络安全架构模型

目前,国际主流的网络安全架构模型主要有: ● 信息技术咨询公司Gartner的ASA(Adaptive Security Architecture自适应安全架构) ● 美国政府资助的非营利研究机构MITRE的ATT&CK(Adversarial Tactics Techniques &…

Linux下 GDB调试器的使用

文章目录 1. 可执行程序的Debug版和Release版区别一、编译选项与目的二、性能与体积三、功能与特性四、查看可执行文件 2. GDB 相关命令GDB常用命令 1. 可执行程序的Debug版和Release版区别 一、编译选项与目的 Debug版: 编译选项:通常使用包含调试信息…

RN开发搬砖经验之—Layout Inspector看不到 DecorView

最近我发现自己已经很久没有使用Layout Inspector这个工具了。今天,为了深入分析React Native(RN)框架中的一个UI问题,我需要查看RN组件对应的Android原生组件视图层级(View tree)的实际情况。因此&#xf…

go-zero(三) 数据库操作

go-zero 数据库操作 在本篇文章中,我们将实现一个用户注册和登录的服务。我们将为此构建一个简单而高效的 API,包括请求参数和响应参数的定义。 一、Mysql连接 1. 创建数据库和表 在 MySQL 中创建名为 test_zero的数据库,并创建user 表 …

23种设计模式-模板方法(Template Method)设计模式

文章目录 一.什么是模板方法模式?二.模板方法模式的特点三.模板方法模式的结构四.模板方法模式的应用场景五.模板方法模式的优缺点六.模板方法模式的C实现七.模板方法模式的JAVA实现八.代码解析九.总结 类图: 模板方法设计模式类图 一.什么是模板方法模…

uniapp实现开发遇到过的问题(持续更新中....)

1. 在ios模拟器上会出现底部留白的情况 解决方案: 在manifest.json文件,找到开源码视图配置,添加如下: "app-plus" : {"safearea":{"bottom":{"offset" : "none" // 底部安…

Python Matplotlib 安装指南:使用 Miniconda 实现跨 Linux、macOS 和 Windows 平台安装

Python Matplotlib 安装指南:使用 Miniconda 实现跨 Linux、macOS 和 Windows 平台安装 Matplotlib是Python最常用的数据可视化工具之一,结合Miniconda可以轻松管理安装和依赖项。在这篇文章中,我们将详细介绍如何使用Miniconda在Linux、mac…

【element-tiptap】Tiptap编辑器核心概念----结构篇

core-concepts 前言:这篇文章来介绍一下 Tiptap 编辑器的一些核心概念 (一)结构 1、 Schemas 定义文档组成方式。一个文档就是标题、段落以及其他的节点组成的一棵树。 每一个 ProseMirror 的文档都有一个与之相关联的 schema,…