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

学技术学英语:elasticsearch查询的两阶段queryingfetching

To understand Elasticsearch’s distributed search, let’s take a moment to understand how querying and fetching work. Unlike simple CRUD tasks, distributed search is like navigating through a maze of shards spread across the cluster.

In Elasticsearch, CRUD operations handle individual documents identified by their unique indextype, and routing-value (usually the document’s _id). However, search queries are more complex. They don’t have a fixed destination and must search through every shard in the index or indices to locate potential matches.

However, discovering matching documents marks just the beginning. The search API needs to combine results from various shards into a unified, organized list before displaying them to the user. This initiates the two-step process of querying and fetching.

By default, Elasticsearch utilizes a search method known as “Query Then Fetch.” This approach progresses through the following steps:

  1. Client sent a query to Elasticsearch
  2. Broadcast the query to each shard
  3. Find all matching documents and calculate scores using local Term/Document Frequencies
  4. Build a priority queue of results (sort, pagination with from/to, etc)
  5. Return metadata about the results to requesting node. Note, the actual document is not sent yet, just the scores
  6. Scores from all the shards are merged and sorted on the requesting node, docs are selected according to query criteria
  7. Finally, the actual docs are retrieved from individual shards where they reside.
  8. Results are returned to the client

Note: Coordinator node responsible for the steps 1,2, and 8.

Query Phase (3,4,5,6): the search query is sent to every shard, initiating local execution and the creation of a priority queue containing matching documents.

Fetch Phase (7): while the query phase identifies relevant documents, the fetch phase is responsible for fetching the actual documents from their respective shards.

This divided method guarantees effective and scalable search operations in a distributed setting. In the query phase, the search query navigates through each shard copy (primary or replica shards) to initiate local searches and compile a prioritized list of matching documents. This phase marks the initial step in refining the search results.

The fetch phase, resulting in the delivery of desired search outcomes. This phase acts as a bridge between query execution and result retrieval, ensuring the thoroughness of the search process.

Additional information:

Enabling Elasticsearch’s slow logs separately for query and fetch phases enables precise monitoring and optimization of search performance. Administrators can pinpoint potential bottlenecks and adjust system parameters by establishing thresholds for query and fetch durations separately.

For instance, configuring slow logs with specific thresholds for query and fetch phases can be done as follows:

PUT *,-.*/_settings
{"index.search.slowlog.threshold.query.warn": "1s","index.search.slowlog.threshold.fetch.warn": "100ms"
}#or with curlcurl -XPUT "http://localhost:9200/*,-.*/_settings" -H "Content-Type: application/json" -d'
{"index.search.slowlog.threshold.query.warn": "1s","index.search.slowlog.threshold.fetch.warn": "100ms"
}'

Elasticsearch query vs fetch times

It’s expected to see way more less fetch time compared to query time. Here is a topic that created in elastic discuss about the speed.

中文总结:

  1. 分布式搜索的两阶段过程

    • Elasticsearch 的分布式搜索分为 查询阶段(Query Phase) 和 获取阶段(Fetch Phase)

    • 查询阶段:搜索请求广播到每个分片,分片本地执行查询并返回匹配文档的元数据(如评分)。

    • 获取阶段:根据查询阶段的结果,从各个分片获取实际的文档内容。

  2. 查询阶段的工作流程

    • 客户端发送查询请求到协调节点(Coordinator Node)。

    • 协调节点将查询广播到索引的每个分片(主分片或副本分片)。

    • 每个分片本地执行查询,计算文档评分,并构建一个优先级队列。

    • 分片返回元数据(如文档 ID 和评分)到协调节点,协调节点合并和排序所有分片的结果。

  3. 获取阶段的工作流程

    • 协调节点根据查询阶段的结果,向相关分片请求实际的文档内容。

    • 分片返回文档内容,协调节点将最终结果返回给客户端。

  4. 慢日志监控

    • 可以为查询阶段和获取阶段分别启用慢日志,以监控和优化搜索性能。

    • 示例配置:

      json

      复制

      PUT *,-.*/_settings
      {"index.search.slowlog.threshold.query.warn": "1s","index.search.slowlog.threshold.fetch.warn": "100ms"
      }
  5. 查询时间与获取时间的对比

    • 通常情况下,获取时间(Fetch Time)远低于 查询时间(Query Time),因为查询阶段涉及更多的计算和排序操作。

相关文章:

学技术学英语:elasticsearch查询的两阶段queryingfetching

To understand Elasticsearch’s distributed search, let’s take a moment to understand how querying and fetching work. Unlike simple CRUD tasks, distributed search is like navigating through a maze of shards spread across the cluster. In Elasticsearch, CRU…...

Linux_线程互斥

互斥的相关概念 共享资源:指多个进程或线程可以共同访问和操作的资源临界资源:被保护的共享资源就叫做临界资源临界区:每个线程内部,访问临界资源的代码,就叫做临界区互斥:任何时刻,互斥保证有…...

基于 NodeJs 一个后端接口的创建过程及其规范 -- 【elpis全栈项目】

基于 NodeJs 一个后端接口的创建过程及其规范 一个接口的诞生: #mermaid-svg-46HXZKI3fdnO0rKV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-46HXZKI3fdnO0rKV .error-icon{fill:#552222;}#mermaid-sv…...

企业知识库提升企业核心竞争力促进团队协作和知识分享

内容概要 在快速发展的数字化时代,企业知识库的构建与运用变得愈发重要。其重要性不仅体现在信息的集中管理上,更在于推动企业整体竞争力的提升。一个高效的知识库可以作为团队合作的重要平台,促进不同部门之间的信息交流与协作,…...

C++ unordered_map和unordered_set的使用,哈希表的实现

文章目录 unordered_map,unorder_set和map ,set的差异哈希表的实现概念直接定址法哈希冲突哈希冲突举个例子 负载因子将关键字转为整数哈希函数除法散列法/除留余数法 哈希冲突的解决方法开放定址法线性探测二次探测 开放定址法代码实现 哈希表的代码 un…...

games101-作业3

由于此次试验需要加载模型,涉及到本地环节,如果是windows系统,需要对main函数中的路径稍作改变: 这么写需要: #include "windows.h" 该段代码: #include "windows.h" int main(int ar…...

【Block总结】高效多尺度注意力EMA,超越SE、CBAM、SA、CA等注意力|即插即用

论文信息 标题: Efficient Multi-Scale Attention Module with Cross-Spatial Learning 作者: Daliang Ouyang, Su He, Guozhong Zhang, Mingzhu Luo, Huaiyong Guo, Jian Zhan, Zhijie Huang 论文链接: https://arxiv.org/pdf/2305.13563v2 GitHub链接: https://github.co…...

Pwn 入门核心工具和命令大全

一、调试工具(GDB 及其插件) GDB 启动调试:gdb ./binary 运行程序:run 或 r 设置断点:break *0x地址 或 b 函数名 查看寄存器:info registers 查看内存:x/10wx 0x地址 (查看 10 个 …...

探索AI(chatgpt、文心一言、kimi等)提示词的奥秘

大家好,我是老六哥,我正在共享使用AI提高工作效率的技巧。欢迎关注我,共同提高使用AI的技能,让AI成功你的个人助理。 "AI提示词究竟是什么?" 这是许多初学者在接触AI时的共同疑问。 "我阅读了大量关于…...

利用飞书机器人进行 - ArXiv自动化检索推荐

相关作者的Github仓库 ArXivToday-Lark 使用教程 Step1 新建机器人 根据飞书官方机器人使用手册,新建自定义机器人,并记录好webhook地址,后续将在配置文件中更新该地址。 可以先完成到后续步骤之前,后续的步骤与安全相关&…...

小白爬虫冒险之反“反爬”:无限debugger、禁用开发者工具、干扰控制台...(持续更新)

背景浅谈 小白踏足JS逆向领域也有一年了,对于逆向这个需求呢主要要求就是让我们去破解**“反爬机制”**,即反“反爬”,脚本处理层面一般都是decipher网站对request设置的cipher,比如破解一个DES/AES加密拿到key。这篇文章先不去谈…...

Ubuntu中MySQL安装-02

服务器端安装 安装服务器端:在终端中输入如下命令,回车后,然后按照提示输入 sudo apt-get install mysql-server 当前使用的ubuntu镜像中已经安装好了mysql服务器端,无需再安装,并且设置成了开机自启动服务器用于接…...

大数据相关职位介绍之一(数据分析,数据开发,数据产品经理,数据运营)

大数据相关职位介绍之一 随着大数据、人工智能(AI)和机器学习的快速发展,数据分析与管理已经成为各行各业的重要组成部分。从互联网公司到传统行业的数字转型,数据相关职位在中国日益成为推动企业创新和提升竞争力的关键力量。以…...

使用DeepSeek API生成Markdown文件

DeepSeek技术应用与代码实现 一、DeepSeek简介 DeepSeek是一款强大的人工智能写作助手,能够根据用户输入的提示(Prompt)快速生成高质量的文章。它不仅支持批量生成文章,还能通过智能分段、Markdown转HTML等功能优化内容。此外&…...

java多线程学习笔记

文章目录 关键词1.什么是多线程以及使用场景?2.并发与并行3.多线程实现3.1继承 Thread 类实现3.2Runnable 接口方式实现3.3Callable接口/Future接口实现3.4三种方式总结 4.常见的成员方法(重点记忆)94.1setName/currentThread/sleep要点4.2线程的优先级…...

Manticore Search,新一代搜索引擎之王

吊打ES,新一代搜索引擎之王 概述 Manticore Search 是一个开源的分布式搜索引擎,专注于高性能和低延迟的搜索场景。 它基于 Sphinx 搜索引擎开发,继承了 Sphinx 的高效索引和查询能力,并在分布式架构、实时搜索、易用性等方面进…...

【MySQL】数据类型与表约束

目录 数据类型分类 数值类型 tinyint类型 bit类型 小数类型 字符串类型 日期和时间类型 enum和set 表的约束 空属性 默认值 列描述 zerofill 主键 自增长 唯一键 外键 数据类型分类 数值类型 tinyint类型 MySQL中,整形可以是有符号和无符号的&…...

CAG技术:提升LLM响应速度与质量

标题:CAG技术:提升LLM响应速度与质量 文章信息摘要: CAG(Cache-Augmented Generation)通过预加载相关知识到LLM的扩展上下文中,显著减少了检索延迟和错误,从而提升了响应速度和质量。与传统的R…...

上位机知识篇---Linux源码编译安装链接命令

文章目录 前言第一部分:Linux源码编译安装1. 安装编译工具2. 下载源代码3. 解压源代码4. 配置5. 编译6. 测试(可选)7. 安装8. 清理(可选)9.注意事项 第二部分:链接命令硬链接(Hard Link&#xf…...

科研绘图系列:R语言绘制线性回归连线图(line chart)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理画图保存图片系统信息参考介绍 科研绘图系列:R语言绘制线性回归连线图(line chart) 加载R包 library(tidyverse) library(ggthemes) libra…...

从真题到实战:程算I机考核心算法与C语言实现精讲

1. 从真题到实战:程算I机考核心算法解析 第一次接触程算I机考的同学,往往会被各种算法题目弄得手忙脚乱。我当年也是这样,直到后来发现真题才是最好的老师。就拿2023年电子科大的机考真题来说,看似简单的题目背后,其实…...

3分钟上手!用aws-cli玩转Redshift数据仓库管理

3分钟上手!用aws-cli玩转Redshift数据仓库管理 【免费下载链接】aws-cli Universal Command Line Interface for Amazon Web Services 项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli AWS CLI(Amazon Web Services Command Line Inte…...

免费一键抠图软件:AI 智能精准抠图,这款 APP 新手也能秒上手

抠图真的太折磨人了!想给照片换背景、给商品图去底色,要么用 PS 太复杂学不会,要么找免费工具抠出来全是毛边、发丝糊成一团,还有的满屏广告、导出带水印,折腾半天一张图都做不好。别再浪费时间了!今天给大…...

告别纯理论!用Proteus+CD4029+4511亲手搭一个可正/倒计数的数码管显示系统

从零搭建可交互数码管计数器:Proteus仿真全流程解析 在电子设计的学习过程中,理论知识的掌握固然重要,但真正让概念"活起来"的往往是亲手搭建电路的实践过程。本文将带您使用Proteus仿真软件,配合CD4029计数器和4511译码…...

电脑小白自救指南:当你的Win10被2345、小鸟壁纸攻占后,除了重装还能做什么?

电脑小白自救指南:当Win10被2345全家桶攻占后的终极清理方案 看着电脑右下角不断弹出的游戏广告、浏览器首页被篡改成陌生网址、任务管理器里挤满陌生进程——这可能是每个Windows用户都经历过的噩梦。尤其当2345系列软件、小鸟壁纸这类"业界毒瘤"侵入系统…...

支持向量机(SVM)原理与应用实战指南

1. 支持向量机:机器学习中的"边界大师"第一次听说支持向量机(SVM)时,我正为一个医疗诊断项目焦头烂额。我们需要区分两种极易混淆的细胞类型,传统逻辑回归的准确率始终卡在82%左右。直到一位前辈建议:"试试SVM吧&a…...

用MATLAB的Phased Array Toolbox快速上手:从常规脉冲到相位编码雷达的波形生成与可视化

MATLAB Phased Array Toolbox实战:从基础脉冲到相位编码雷达的波形生成与可视化 雷达工程师们常说:"波形设计是雷达系统的灵魂。"在MATLAB的Phased Array Toolbox中,这句话得到了完美印证。当我第一次打开这个工具箱时,…...

普通人也能轻松掌握的AI应用秘籍!4步让你秒变AI达人!

你是不是也这样—— 听说AI很厉害,想学,但打开DeepSeek或者豆包之后,对着空白的输入框愣了半天,不知道问什么,最后关掉了。 或者试过几次,感觉AI说的都是"大话",用不上,就…...

C++ 字符串匹配实战:手把手教你用 find() 函数搞定子串验证(附两种方法对比)

C 字符串匹配实战:从基础到进阶的双重解法剖析 在编程竞赛和日常开发中,字符串处理是最基础却最常被考察的技能之一。想象这样一个场景:你需要快速判断用户输入的搜索关键词是否包含在商品数据库中,或者需要验证一段DNA序列是否包…...

别再手动敲代码了!用STM32CubeMX图形化配置STM32F103C8T6,5分钟点亮你的第一个LED

5分钟极速入门STM32开发:用CubeMX图形化点亮LED的完整指南 第一次拿到STM32开发板时,那种既兴奋又忐忑的心情我至今记忆犹新。作为从51单片机转型过来的开发者,面对STM32复杂的时钟树和寄存器配置,曾经连续三天都没能让一个LED闪烁…...