📦 客户端 / Client
SDK / REST API / Kibana
🔀 协调节点(Coordinating Node)
接收请求 · 解析 Query DSL · 路由分发
任意节点均可充当协调节点;请求轮询分发
Phase 1 · Query Phase
🗂 Primary Shard 0
本地倒排索引
BM25 打分
🗂 Primary Shard 1
本地倒排索引
BM25 打分
🗂 Replica Shard …
读请求可路由
到副本分片
🔢 协调节点:全局归并排序
收集各分片 Top-K · 全局排序 · 取最终 Top-N doc_id
Phase 2 · Fetch Phase
📄 Fetch Phase:按 doc_id 拉取文档
Multi-GET 到对应分片,返回 _source / fields
只拉取最终结果文档,减少 IO
🗄 缓存层
Request Cache(聚合)· Field Data Cache · Node Query Cache
命中缓存时跳过分片检索
✅ 响应结果 Response
took · hits.total · hits.hits[ _source, _score, … ]
📦 客户端 接收响应
解析 JSON · 渲染 / 处理业务逻辑
⚠️ 异常 / 特殊路径
| 场景 |
处理方式 |
| 分片不可用 |
路由到副本分片;若无副本则返回 500 / partial results |
| 超时 |
timeout 参数控制,返回已收到的部分结果 + timed_out=true |
| 深翻页 |
from+size 有 max_result_window 限制;推荐用 search_after 或 scroll |
| 聚合 |
在 Query Phase 各分片独立聚合,协调节点合并 aggregation 结果 |