查询阶段 | Elasticsearch: 权威指南 | Elastic
2024-12-25
在初始 查询阶段 时, 查询会广播到索引中每一个分片拷贝(主分片或者副本分片)。 每个分片在本地执行搜索并构建一个匹配文档的 _优先队列_。
这个查询阶段的过程如图 图 14 “查询过程分布式搜索” 所示。
查询阶段包含以下三个步骤:
search
请求到 Node 3
, Node 3
会创建一个大小为 from + size
的空优先队列。
Node 3
将查询请求转发到索引的每个主分片或副本分片中。每个分片在本地执行查询并添加结果到大小为 from + size
的本地有序优先队列中。
Node 3
,它合并这些值到自己的优先队列中来产生一个全局排序后的结果列表。
当一个搜索请求被发送到某个节点时,这个节点就变成了协调节点。 这个节点的任务是广播查询请求到所有相关分片并将它们的响应整合成全局排序后的结果集合,这个结果集合会返回给客户端。
第一步是广播请求到索引中每一个节点的分片拷贝。就像 document GET
requests 所描述的,
查询请求可以被某个主分片或某个副本分片处理,
这就是为什么更多的副本(当结合更多的硬件)能够增加搜索吞吐率。
协调节点将在之后的请求中轮询所有的分片拷贝来分摊负载。
每个分片在本地执行查询请求并且创建一个长度为 from + size
的优先队列—也就是说,每个分片创建的结果集足够大,均可以满足全局的搜索请求。
分片返回一个轻量级的结果列表到协调节点,它仅包含文档 ID 集合以及任何排序需要用到的值,例如 _score
。
协调节点将这些分片级的结果合并到自己的有序优先队列里,它代表了全局排序结果集合。至此查询过程结束。
官方地址:https://www.elastic.co/guide/cn/elasticsearch/guide/current/_query_phase.html