查询阶段

在初始 查询阶段 时, 查询会广播到索引中每一个分片拷贝(主分片或者副本分片)。 每个分片在本地执行搜索并构建一个匹配文档的 _优先队列_。

这个查询阶段的过程如图所示。

查询过程分布式搜索

查询阶段包含以下三个步骤:

  1. 客户端发送一个 search 请求到 Node 3 , Node 3 会创建一个大小为 from + size 的空优先队列。
  2. Node 3 将查询请求转发到索引的每个主分片或副本分片中。每个分片在本地执行查询并添加结果到大小为 from + size 的本地有序优先队列中。
  3. 每个分片返回各自优先队列中所有文档的 ID 和排序值给协调节点,也就是 Node 3 ,它合并这些值到自己的优先队列中来产生一个全局排序后的结果列表。

当一个搜索请求被发送到某个节点时,这个节点就变成了协调节点。 这个节点的任务是广播查询请求到所有相关分片并将它们的响应整合成全局排序后的结果集合,这个结果集合会返回给客户端。

第一步是广播请求到索引中每一个节点的分片拷贝。就像 document GET requests 所描述的, 查询请求可以被某个主分片或某个副本分片处理, 这就是为什么更多的副本(当结合更多的硬件)能够增加搜索吞吐率。 协调节点将在之后的请求中轮询所有的分片拷贝来分摊负载。

每个分片在本地执行查询请求并且创建一个长度为 from + size 的优先队列—也就是说,每个分片创建的结果集足够大,均可以满足全局的搜索请求。 分片返回一个轻量级的结果列表到协调节点,它仅包含文档 ID 集合以及任何排序需要用到的值,例如 _score 。

协调节点将这些分片级的结果合并到自己的有序优先队列里,它代表了全局排序结果集合。至此查询过程结束。

注意

一个索引可以由一个或几个主分片组成, 所以一个针对单个索引的搜索请求需要能够把来自多个分片的结果组合起来。 针对 multiple 或者 all 索引的搜索工作方式也是完全一致的--仅仅是包含了更多的分片而已。












  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elasticsearch 是一个开源的分布式搜索和分析引擎,采用倒排索引的方式来实现高效的全文搜索。其查询原理主要包括以下几个方面: 1. 倒排索引:Elasticsearch 使用倒排索引来加速搜索过程。在倒排索引中,每个词项都会记录它在文档中的位置信息,以及包含该词项的文档列表。这样可以通过词项快速定位到相关的文档。 2. 分词器:在索引查询阶段,Elasticsearch 使用分词器将文本划分为一个个的词项。分词器根据不同的语言、规则和配置来进行分词,确保索引查询的一致性。 3. 查询解析:当用户提交一个查询时,Elasticsearch 会对查询进行解析和分析,将查询语句解析为一个查询对象。查询对象包含了查询的类型、条件、过滤器等信息。 4. 查询执行:Elasticsearch 将查询对象传递给倒排索引,根据查询条件进行匹配。倒排索引会根据查询词项定位到相关的文档,并计算文档的相关度得分。 5. 相关度计算:Elasticsearch 使用 BM25 算法来计算文档的相关度得分。BM25 算法考虑了查询词项在文档中的频率、文档长度等因素,以确定文档的相关度。 6. 结果返回:根据相关度得分,Elasticsearch 对匹配的文档进行排序,并返回给用户。用户可以根据需要设置返回结果的数量、排序方式等。 总的来说,Elasticsearch 的查询原理是通过倒排索引和相关度计算来实现高效的全文搜索。它能够快速地定位到相关的文档,并按照相关度进行排序和返回结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值