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

深度解析 Elasticsearch 搜索过程:Query Then Fetch 两阶段详解

深度解析 Elasticsearch 搜索过程Query Then Fetch 两阶段详解前言一、搜索流程全景图1.1 两阶段概览1.2 为什么需要两个阶段二、示例集群环境三、第一阶段Query 阶段3.1 步骤一协调节点广播请求3.2 步骤二每个分片本地查询3.3 步骤三协调节点合并排序四、第二阶段Fetch 阶段4.1 步骤一协调节点发起 MultiGet 请求4.2 步骤二分片返回完整文档4.3 步骤三协调节点组装并返回五、深度剖析关键设计细节5.1 为什么 Query 阶段返回 fromsize 条而非只返回 size 条5.2 深度分页问题5.3 分片选择策略主 vs 副本5.4 搜索类型已废弃六、完整时序图七、性能优化建议八、常见面试题Q1Query 阶段和 Fetch 阶段各自做了什么Q2为什么需要两个阶段不能合二为一Q3什么是深度分页问题如何解决Q4协调节点如何决定查询主分片还是副本分片九、总结十、面试加分回答)The Begin点点关注收藏不迷路前言搜索是 Elasticsearch 最核心的功能之一但很多开发者对 ES 内部如何执行搜索请求一知半解。为什么搜索分为两个阶段协调节点做了什么分片如何返回结果本文将围绕官方定义的“Query Then Fetch”两阶段模型逐步拆解分布式搜索的完整流程。一、搜索流程全景图1.1 两阶段概览┌─────────────────────────────────────────────────────────────────────┐ │ 客户端发送搜索请求 │ │ GET /my_index/_search?qkeyword │ └─────────────────────────────────┬───────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────┐ │ 【第一阶段Query 阶段】 │ │ 目的定位到哪些文档匹配但不返回文档内容 │ │ │ │ 1. 协调节点将请求广播到所有分片主或副本 │ │ 2. 每个分片本地查询返回文档ID 排序值到优先队列 │ │ 3. 协调节点合并各分片结果生成全局排序列表 │ └─────────────────────────────────┬───────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────┐ │ 【第二阶段Fetch 阶段】 │ │ 目的根据 Query 阶段得到的文档ID获取完整的文档内容 │ │ │ │ 1. 协调节点向相关分片发送 MultiGet 请求 │ │ 2. 分片返回完整文档内容 │ │ 3. 协调节点组装结果返回给客户端 │ └─────────────────────────────────────────────────────────────────────┘1.2 为什么需要两个阶段如果合并为一个阶段两阶段分离的好处每个分片返回完整文档 → 大量网络传输Query 阶段只传ID和排序值数据量极小协调节点需要丢弃超出size的文档Fetch 阶段只取最终需要的文档无法做全局排序先全局排序再按需获取一句话总结先定位后取数避免网络和内存浪费。二、示例集群环境为便于理解设定以下集群状态配置项值索引名my_index主分片数5副本数1总分片数105主 5副本文档总数10,000 条搜索请求GET/my_index/_search{from:0,size:10,query:{match:{title:elasticsearch}},sort:[{_score:desc}]}三、第一阶段Query 阶段3.1 步骤一协调节点广播请求┌─────────────────┐ │ 客户端 │ └────────┬────────┘ │ ▼ ┌─────────────────┐ │ 协调节点 │ │ (接收搜索请求) │ └────────┬────────┘ │ ┌──────────────┬───────────────┼───────────────┬──────────────┐ │ │ │ │ │ ▼ ▼ ▼ ▼ ▼ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ 分片0 │ │ 分片1 │ │ 分片2 │ │ 分片3 │ │ 分片4 │ │ (主/副本) │ │ (主/副本) │ │ (主/副本) │ │ (主/副本) │ │ (主/副本) │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘关键要点协调节点向所有分片发送请求每个分片只命中主或副本中的一个采用轮询策略选择主还是副本负载均衡请求参数完全相同query、from、size、sort3.2 步骤二每个分片本地查询每个分片收到请求后独立执行以下操作┌─────────────────────────────────────────────────────────────────┐ │ 单个分片内部处理流程 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ 1. 解析查询语句 → 生成 Lucene Query │ │ ▼ │ │ 2. 遍历倒排索引 → 找到匹配的文档ID列表 │ │ ▼ │ │ 3. 计算每个文档的 _score相关性评分 │ │ ▼ │ │ 4. 按排序字段排序默认按 _score 降序 │ │ ▼ │ │ 5. 截取 [from, fromsize] 范围的文档本地优先队列 │ │ ▼ │ │ 6. 返回 (文档ID 排序值) 给协调节点不返回文档内容 │ │ │ └─────────────────────────────────────────────────────────────────┘示例假设每个分片有 2000 条匹配文档from0, size10每个分片只返回前 10 条按排序值。// 每个分片返回给协调节点的数据格式{shard:0,hits:[{_id:doc_123,_score:9.5,sort_values:[9.5]},{_id:doc_456,_score:9.2,sort_values:[9.2]},...{_id:doc_789,_score:8.1,sort_values:[8.1]}// 共10条]}3.3 步骤三协调节点合并排序协调节点收到所有分片的返回结果后┌─────────────────────────────────────────────────────────────────┐ │ 协调节点合并流程 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ 输入5个分片 × 10条结果 50条候选记录 │ │ ▼ │ │ 1. 将所有50条记录放入全局优先队列 │ │ ▼ │ │ 2. 按排序规则重新排序_score 降序 │ │ ▼ │ │ 3. 截取 [0, 10] 条即最终需要的10条文档 │ │ ▼ │ │ 4. 记录这10条文档分别来自哪个分片 │ │ 文档A → 分片0 │ │ 文档B → 分片2 │ │ 文档C → 分片1 │ │ ... │ │ │ └─────────────────────────────────────────────────────────────────┘此时 Query 阶段结束协调节点知道哪 10 条文档需要返回每条文档所在的分片位置四、第二阶段Fetch 阶段4.1 步骤一协调节点发起 MultiGet 请求协调节点根据 Query 阶段的结果向相关分片批量获取文档内容协调节点 │ ┌──────────────────┼──────────────────┐ │ │ │ ▼ ▼ ▼ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ 分片0 │ │ 分片1 │ │ 分片2 │ │ 需要文档 │ │ 需要文档 │ │ 需要文档 │ │ [A, D] │ │ [C, E] │ │ [B, F] │ └─────────┘ └─────────┘ └─────────┘// 协调节点发送的 MultiGet 请求示例GET/_mget{docs:[{_index:my_index,_id:doc_A,_shard:0},{_index:my_index,_id:doc_D,_shard:0},{_index:my_index,_id:doc_C,_shard:1},...]}4.2 步骤二分片返回完整文档每个分片从Lucene 段或Translog中读取完整的文档源_source// 分片返回的文档内容{_id:doc_A,_index:my_index,_score:9.5,_source:{title:Elasticsearch 入门教程,content:本文介绍 Elasticsearch 的基本概念...,timestamp:2026-01-26T10:00:00Z}}4.3 步骤三协调节点组装并返回协调节点收集所有文档按 Query 阶段排好的顺序组装返回给客户端{took:15,timed_out:false,_shards:{total:10,successful:10,skipped:0,failed:0},hits:{total:{value:10000,relation:eq},max_score:9.5,hits:[{_index:my_index,_id:doc_A,_score:9.5,_source:{title:Elasticsearch 入门教程,...}},{_index:my_index,_id:doc_B,_score:9.3,_source:{title:Elasticsearch 高级查询,...}}// ... 共10条]}}五、深度剖析关键设计细节5.1 为什么 Query 阶段返回fromsize条而非只返回size条如果只返回 size 条实际做法返回 fromsize 条每个分片返回前 10 条每个分片返回前 50 条from0, size10 → 01010等等纠正实际上每个分片返回from size条而不是size条原因假设from90, size10全局第 91-100 条文档可能分散在各分片的前 100 条中。如果每个分片只返回 10 条会丢失数据。示例计算from 90, size 10 每个分片需要返回from size 100 条本地排序后的前100条 协调节点收到5个分片 × 100条 500条候选记录 ↓ 全局排序后取 [90, 100) 共10条5.2 深度分页问题上述机制导致深度分页性能极差页码from每个分片返回数协调节点处理数第1页0105×1050第10页901005×100500第100页99010005×10005000第1000页9990100005×1000050000解决方案Search After基于上一页最后一条文档的排序值继续查询Scroll API用于大量数据导出不再推荐Point in Time (PIT)ES 7.10 引入的游标机制5.3 分片选择策略主 vs 副本协调节点决定每个分片查询主还是副本遵循负载均衡原则默认策略自适应副本选择Adaptive Replica Selection - 优先选择响应最快的节点 - 考虑节点历史延迟和队列长度好处分摊主节点压力提升查询吞吐量5.4 搜索类型已废弃早期 ES 支持多种搜索类型现已统一为query_then_fetch搜索类型说明状态query_and_fetch查询取回合并废弃dfs_query_then_fetch全局词频计算废弃默认已优化query_then_fetch标准两阶段当前唯一六、完整时序图客户端 协调节点 分片0(主) 分片1(副本) 分片2(主) ... │ │ │ │ │ │──搜索请求────▶│ │ │ │ │ │ │ │ │ │ │──Query请求───▶│ │ │ │ │──Query请求──────────────────▶│ │ │ │──Query请求──────────────────────────────────▶│ │ │ │ │ │ │ │◀──返回ID列表──│ │ │ │ │◀──返回ID列表──────────────────│ │ │ │◀──返回ID列表──────────────────────────────────│ │ │ │ │ │ │ │ (合并排序) │ │ │ │ │ │ │ │ │ │──Fetch请求────▶│ │ │ │ │──Fetch请求──────────────────▶│ │ │ │ │ │ │ │ │◀──完整文档────│ │ │ │ │◀──完整文档──────────────────│ │ │ │ │ │ │ │◀──最终结果────│ │ │ │七、性能优化建议优化点建议效果控制返回字段使用_source只返回必要字段减少网络传输避免 depth 分页使用search_after替代from/size性能提升 10-100x合理设置分片数单分片 30-50GB避免过度分片使用索引排序index.sort减少排序开销查询提速 30%开启自适应副本默认已开启负载更均衡八、常见面试题Q1Query 阶段和 Fetch 阶段各自做了什么回答Query 阶段协调节点将搜索请求广播到所有分片每个分片本地查询后返回文档ID 排序值不返回文档内容。协调节点合并所有结果生成全局排序列表确定最终需要获取的文档ID及所在分片。Fetch 阶段协调节点向相关分片发送MultiGet 批量请求获取完整文档内容_source组装后返回给客户端。Q2为什么需要两个阶段不能合二为一回答如果合为一个阶段每个分片会返回大量完整文档造成巨大的网络开销。例如from990, size10每个分片需要返回 1000 条完整文档5 个分片就是 5000 条但最终只取 10 条。两阶段分离后Query 阶段只传轻量级的 ID 和排序值约 100 字节/条Fetch 阶段只取最终的 10 条效率大幅提升。Q3什么是深度分页问题如何解决回答深度分页指跳转到很深页码如第 1000 页的情况。由于 Query 阶段每个分片必须返回fromsize条记录翻页越深协调节点处理的数据量越大第 1000 页需要每个分片返回 10000 条5 分片处理 50000 条。解决方案Search After使用上一页最后一条文档的排序值像游标一样向前翻页Point in Time (PIT)固定时间点的快照视图结合 search_after 使用Scroll API适合大量数据导出已不推荐用于实时搜索Q4协调节点如何决定查询主分片还是副本分片回答ES 7.x 后默认使用自适应副本选择Adaptive Replica Selection协调节点会维护每个节点的响应延迟、历史失败率、搜索线程池队列长度等指标动态选择当前最优的节点主或副本发送请求。这样既实现了负载均衡又能自动避开慢节点。九、总结维度Query 阶段Fetch 阶段目的定位匹配文档获取完整内容传输数据文档ID 排序值完整_source数据量小每个分片fromsize条大仅size条涉及的节点所有分片只包含最终文档的分片关键操作倒排索引检索本地排序Lucene 读取_source时间复杂度O(分片数 × 查询开销)O(文档条数)核心要点搜索采用Query Then Fetch两阶段模型Query 阶段坐标 不取→ 轻量级定位Fetch 阶段取数 组装→ 按需获取深度分页用Search After替代from/size协调节点通过自适应副本选择实现负载均衡十、面试加分回答面试官请详细描述 Elasticsearch 的搜索过程。候选人“ES 的搜索采用Query Then Fetch两阶段模型。Query 阶段协调节点将请求广播到所有分片主或副本之一。每个分片独立执行查询从倒排索引中找到匹配文档计算_score并按排序字段截取fromsize条结果只返回文档ID和排序值给协调节点。协调节点合并所有分片结果进行全局排序最终确定需要返回的size条文档及其所在分片。这一阶段的核心价值是轻量级传输避免早期传输大量无用数据。Fetch 阶段协调节点向包含目标文档的分片发送 MultiGet 批量请求获取完整的_source内容按 Query 阶段排好的顺序组装返回给客户端。这里有一个关键设计每个分片必须返回fromsize条记录而非size条因为全局第 N 条可能来自任意分片的前 N 条。这也导致了深度分页问题解决方案是使用Search After Point in Time代替传统的 from/size 翻页。另外ES 通过自适应副本选择来决定查询主还是副本优先选择响应最快的节点兼顾负载均衡和性能。”The End点点关注收藏不迷路

相关文章:

深度解析 Elasticsearch 搜索过程:Query Then Fetch 两阶段详解

深度解析 Elasticsearch 搜索过程:Query Then Fetch 两阶段详解 前言一、搜索流程全景图1.1 两阶段概览1.2 为什么需要两个阶段?二、示例集群环境三、第一阶段:Query 阶段3.1 步骤一:协调节点广播请求3.2 步骤二:每个分…...

c++怎么在Linux下通过文件描述符获取详细的Inode节点信息【底层】

...

如何使用python转移mysql数据库中的全部数据

今天,有人告诉我,“马上就要双十一了,我遇到了一个问题。”我很好奇,“是什么问题呢?关于双十一的商品折扣吗?”他说,“不,是我之前双十一的时候,购买的mysql数据库到期了…...

详解如何利用Cython为Python代码加速

代码我们在同文件夹下新建一个 update.pyx 文件,写入如下内容1234567891011121314151617181920212223242526272829303132333435import numpy as np cimport numpy as np cimport cythonDTYPE np.floatctypedef np.float_t DTYPE_tdef update_state(np.ndarray[DTYP…...

使用Cython中prange函数实现for循环的并行

上一篇文章我们探讨了 GIL 的原理,以及如何释放 GIL 实现并行,做法是将函数声明为 nogil,然后使用 with nogil 上下文管理器即可。在使用上非常简单,但如果我们想让循环也能够并行执行,那么该方式就不太方便了&#xf…...

3大核心模块掌握IPATool:从iOS应用搜索到IPA下载的完整指南

3大核心模块掌握IPATool:从iOS应用搜索到IPA下载的完整指南 【免费下载链接】ipatool Command-line tool that allows searching and downloading app packages (known as ipa files) from the iOS App Store 项目地址: https://gitcode.com/GitHub_Trending/ip/i…...

开发者内功修炼指南:从代码实践到架构设计的核心技能

1. 项目概述:一份写给开发者的“内功心法”在技术社区里,我们常常看到各种炫酷的新框架、新工具,它们像一把把锋利的“神兵利器”,让人眼花缭乱。然而,一个老生常谈却又无比真实的问题是:给你倚天剑&#x…...

BetterNCM Installer深度解析:5个核心技巧助你打造个性化网易云音乐体验

BetterNCM Installer深度解析:5个核心技巧助你打造个性化网易云音乐体验 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 你是否曾经在使用网易云音乐时,觉得某些…...

深度解析WenQuanYi Micro Hei:轻量级开源中文字体架构设计与性能优化指南

深度解析WenQuanYi Micro Hei:轻量级开源中文字体架构设计与性能优化指南 【免费下载链接】fonts-wqy-microhei Debian package for WenQuanYi Micro Hei (mirror of https://anonscm.debian.org/git/pkg-fonts/fonts-wqy-microhei.git) 项目地址: https://gitcod…...

开源笔记应用yn:基于Markdown的沉浸式写作与知识管理方案

1. 项目概述:一个为创作者而生的“数字书房” 如果你和我一样,每天需要在不同设备、不同场景下处理大量的文字工作——可能是写代码时的零散笔记,可能是撰写技术博客的草稿,也可能是整理项目文档的片段——那么你肯定对市面上那些…...

LightGBM核心原理与工业级应用实战指南

1. 初识LightGBM:当GBDT遇见效率革命第一次接触LightGBM是在处理一个包含数百万条记录的电商用户行为数据集时。当时我正苦于XGBoost的训练速度无法满足迭代需求,直到发现了这个微软开源的梯度提升框架。与传统GBDT(Gradient Boosting Decisi…...

从LlamaDeploy到Llama-Agents:智能体工作流生产级部署实战指南

1. 项目概述:从原型到生产,LlamaDeploy的使命与演进如果你和我一样,在过去一年里深度折腾过基于大语言模型(LLM)的智能体应用,那你肯定经历过这个阶段:在Jupyter Notebook里,用几行代…...

边缘资源“幽灵占用”正在吞噬你的SLO!MCP 2026 v2.4.0新增Resource Shadow Detection功能全解

更多请点击: https://intelliparadigm.com 第一章:边缘资源“幽灵占用”问题的本质与SLO影响 边缘计算环境中,“幽灵占用”指资源(如 CPU、内存、GPU 或网络端口)被进程或容器长期持有却未实际执行有效负载&#xff0…...

【信创合规红线预警】:MCP 2026新增3项硬件可信启动要求——飞腾D2000/鲲鹏920/海光Hygon C86平台适配避坑清单(含UEFI Secure Boot签名密钥迁移路径)

更多请点击: https://intelliparadigm.com 第一章:MCP 2026可信启动新规的合规背景与战略意义 随着全球关键信息基础设施安全治理持续深化,MCP(Multi-layered Chain-of-Trust Protocol)2026可信启动新规正式纳入《国家…...

【2024最硬核VS Code自动化教程】:覆盖GitHub Actions+Dev Containers+Task Runner的Copilot Next三重协同配置

更多请点击: https://intelliparadigm.com 第一章:VS Code Copilot Next 自动化工作流配置全景概览 VS Code Copilot Next 并非独立插件,而是基于 GitHub Copilot Chat 的深度集成增强形态,依托 VS Code 1.86 的新扩展主机 API …...

Hunyuan-MT-7B开源镜像部署:Pixel Language Portal灰度发布策略详解

Hunyuan-MT-7B开源镜像部署:Pixel Language Portal灰度发布策略详解 1. 项目概述 Pixel Language Portal(像素语言跨维传送门)是一款基于Tencent Hunyuan-MT-7B核心引擎构建的创新翻译工具。该产品通过独特的16-bit像素冒险界面设计&#x…...

显卡驱动残留问题终极解决方案:Display Driver Uninstaller深度使用指南

显卡驱动残留问题终极解决方案:Display Driver Uninstaller深度使用指南 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-dri…...

3分钟解锁PDF宝藏:Python pdftotext终极文本提取指南

3分钟解锁PDF宝藏:Python pdftotext终极文本提取指南 【免费下载链接】pdftotext Simple PDF text extraction 项目地址: https://gitcode.com/gh_mirrors/pd/pdftotext 在日常办公和数据处理中,PDF文档就像一座座信息宝库,但如何快速…...

DeepSeek V4 正式发布:1.6万亿参数、百万上下文,开源大模型进入新阶段

DeepSeek V4 正式发布:1.6万亿参数、百万上下文,开源大模型进入新阶段 2026年4月24日,深度求索(DeepSeek)正式发布了新一代旗舰模型 DeepSeek-V4,并同步开源模型权重。这是距 V3 发布484天之后的一次重大版…...

Agent 项目如何写 PRD:任务边界、风险清单与验收口径

Agent 项目如何写 PRD:任务边界、风险清单与验收口径 1. 引入:90%的Agent项目失败,都始于一份不合格的PRD 2024年某AI咨询公司发布的《企业Agent落地调研报告》显示:全年国内企业上马的Agent类项目中,72%最终未能落地,其中48%的失败原因可以归结为「需求定义模糊」——…...

框架篇第3节:PyTorch C++扩展(一)——环境搭建与一个简单的add算子

引言 当PyTorch内置算子不够用时,你可以用C++和CUDA扩展它——这是通往高性能自定义算子的必经之路 前两节我们学习了PyTorch的GPU加速原理和算子底层机制。但实际开发中,你可能会遇到PyTorch没有提供的高效算子,或者需要融合多个操作以减少内存访问。这时,你就需要自定义算…...

深入Rockchip Android分区表:揭秘‘logo分区’的创建与定制化配置

Rockchip Android分区表深度解析:logo分区的定制化设计与工程实践 在工业自动化设备、数字标牌和定制化终端领域,开机第一屏的品牌标识展示往往承载着重要的商业价值和技术内涵。不同于消费级设备千篇一律的厂商Logo,专业设备通常需要根据应用…...

告别硬件IIC:STM32F103用软件模拟IIC读写AT24C02/04/16全攻略(含地址计算详解)

STM32软件模拟IIC驱动AT24C系列EEPROM实战指南 1. 为什么选择软件模拟IIC? 在嵌入式开发中,IIC总线因其简单的两线制(SDA和SCL)和灵活的多设备连接特性,成为连接各类传感器的首选方案。然而,STM32的硬件IIC…...

Phi-4-mini-flash-reasoning多场景:从单题求解到批量PRD分析的扩展路径

Phi-4-mini-flash-reasoning多场景:从单题求解到批量PRD分析的扩展路径 1. 轻量级推理模型的核心价值 Phi-4-mini-flash-reasoning是一款专为结构化思维任务设计的轻量级文本推理模型。与通用大模型不同,它在数学推导、逻辑分析和长文本推理等场景展现…...

06华夏之光永存:电磁弹射+一次性火箭航天入轨方案【第六篇:电磁弹射核心电池组参数与供配电优化方案】

华夏之光永存:电磁弹射一次性火箭航天入轨方案【第六篇:电磁弹射核心电池组参数与供配电优化方案】核心备注:本文为该系列第六篇核心电池组供配电篇,系列共计10篇保姆式开源落地白皮书,全文基于大功率储能电化学、电力…...

完整网页截图终极指南:如何一键保存超长网页的完美副本

完整网页截图终极指南:如何一键保存超长网页的完美副本 【免费下载链接】full-page-screen-capture-chrome-extension One-click full page screen captures in Google Chrome 项目地址: https://gitcode.com/gh_mirrors/fu/full-page-screen-capture-chrome-exte…...

网络受限环境下的OOTDiffusion虚拟试衣AI完整部署实战指南

网络受限环境下的OOTDiffusion虚拟试衣AI完整部署实战指南 【免费下载链接】OOTDiffusion [AAAI 2025] Official implementation of "OOTDiffusion: Outfitting Fusion based Latent Diffusion for Controllable Virtual Try-on" 项目地址: https://gitcode.com/Gi…...

五大免费大语言模型(LLM)课程推荐与学习指南

1. 大语言模型(LLMs)学习资源概览过去两年,大语言模型(LLMs)的发展速度令人咋舌。从最初的文本补全到现在的多模态交互,这些模型正在重塑我们与数字世界的互动方式。作为一名长期跟踪AI技术发展的从业者&am…...

机器学习中矩阵类型与应用实践指南

1. 矩阵类型在机器学习线性代数中的核心价值第一次接触机器学习时,我被各种矩阵运算绕得头晕眼花,直到发现不同类型的矩阵其实对应着特定的数学特性和应用场景。就像木匠需要了解不同木材的特性才能打造好家具,理解矩阵类型能让我们更高效地构…...

机器学习k折交叉验证:k值选择与性能评估指南

1. 机器学习中的k折交叉验证配置指南在机器学习实践中,评估模型性能是项目流程中的关键环节。k折交叉验证(k-Fold Cross-Validation)作为最常用的评估技术之一,其核心思想是将数据集划分为k个大小相似的互斥子集,每次用…...