Elasticsearch系列---搜索执行过程及scroll游标查询

本文深入解析Elasticsearch的两阶段搜索过程,包括查询阶段和取回阶段,讨论了preference设置、bouncing results问题、超时问题和routing。此外,重点介绍了scroll游标查询的原理和使用示例,强调其在大批量数据获取中的高效性。
摘要由CSDN通过智能技术生成

概要

本篇主要介绍一下分布式环境中搜索的两阶段执行过程。

两阶段搜索过程

回顾我们之前的CRUD操作,因为只对单个文档进行处理,文档的唯一性很容易确定,并且很容易知道是此文档在哪个node,哪个shard中。

但搜索比CRUD复杂,符合搜索条件的文档,可能散落在各个node、各个shard中,我们需要找到匹配的文档,并且把从各个node,各个shard返回的结果进行汇总、排序,组成一个最终的结果排序列表,才算完成一个搜索过程。我们将按两阶段的方式对这个过程进行讲解。

查询阶段

假定我们的ES集群有三个node,numberofprimary_shards为3,replica shard为1,我们执行一个这样的查询请求:

GET /music/children/_search
{
  "from": 980,
  "size": 20
}

查询阶段的过程示意图如下:

  1. Java客户端发起查询请求,接受请求的node-1成为Coordinate Node(协调者),该node会创建一个priority queue,长度为from size即1000。
  2. Coordinate Node将请求分发到所有的primary shard或replica shard中,每个shard在本地创建一个同样大小的priority queue,长度也为from size,用于存储该shard执行查询的结果。
  3. 每个shard将各自priority queue的元素返回给Coordinate Node,元素内只包含文档的ID和排序值(如_score),Coordinate Node将合并所有的元素到自己的priority queue中,并完成排序动作,最终根据from、size值对结果进行截取。

补充说明:

  1. 哪个node接收客户端的请求,该node就会成为Coordinate Node。
  2. Coordinate Node转发请求时,会根据负载均衡算法分配到同一分片的primary shard或replica shard上,为什么说replica值设置得大一些可以增加系统吞吐量的原理就在这里,Coordinate Node的查询请求负载均衡算法会轮询所有的可用shard,并发场景时就会有更多的硬件资源(CPU、内存,IO)会参与其中,系统整体的吞吐量就能提升。
  3. 此查询过程Coordinate Node得到是轻量级的元素信息&#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
执行一个分页查询时,Elasticsearch执行过程通常涉及以下步骤: 1. 查询解析:首先,Elasticsearch 解析查询请求,包括解析查询语句、过滤条件、排序规则以及分页参数等。它会根据查询的内容构建一个查询对象。 2. 查询路由:根据查询的索引和路由信息,Elasticsearch 确定哪些分片(shard)需要参与查询操作。如果指定了特定的路由值,它会将查询路由到对应的分片上。 3. 分片搜索Elasticsearch 在每个相关的分片上执行搜索操作。它将查询对象发送给每个分片,并在分片上执行相应的查询操作。 4. 结果合并:每个分片独立地返回与查询匹配的文档列表和相关的打分信息。这些结果会经过协调节点(coordinating node)进行合并和排序,以生成全局的搜索结果列表。 5. 分页处理:在合并和排序后,Elasticsearch 根据指定的分页参数(页码、每页大小)截取所需的结果片段。它会跳过前面的文档,只返回当前页所需的文档数量。 6. 结果返回:最后,Elasticsearch 将分页后的结果返回给客户端,以满足查询请求。客户端可以根据返回的结果进行处理,如展示、分析或进一步处理。 需要注意的是,Elasticsearch 的分页是基于深度分页(deep pagination)的,这意味着在高页码的情况下,性能可能会受到影响。为了避免深度分页带来的性能问题,可以使用游标scroll)或搜索后的滚动(search after)等技术来处理大量数据的分页查询。这些技术可以通过保持搜索上下文来提高性能,并减少重复的开销。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值