elasticsearch search模块源码分析

基于版本:5.6.2

增删改查操作只对单个文档进行处理,通常由 _index, _type, 和 _id三元组来确定唯一文档。但搜索需要一种更复杂的模型,因为不知道查询会命中哪些文档。一个搜索请求必须询问指定索引的所有分片中的某个副本来进行匹配。假设一个索引有5个主分片,1个副本分片,共10个分片,一次搜索请求会由5个分片来共同完成,他们有可能是主分片,也可能是副分片。也就是说,一次搜索请求只会命中所有副本中的一个。

找到匹配文档仅仅完成了一半,多分片中的结果必须组合成单个排序列表。集群的任意节点都可以接受搜索请求,接收客户端请求的节点成为协调节点,在协调节点,搜索任务被执行成一个两阶段过程,称之为 query then fetch 。 真正执行搜索任务的节点暂且称为数据节点。

在协调节点,相应地实现位于:
查询阶段(query):o.e.a.search.InitialSearchPhase
取回阶段(fetch):o.e.a.search.FetchSearchPhase

他们都继承自:SearchPhase
在这里插入图片描述

search_type phase 特性介绍
query and fetch 过时方法 master根据query条件从shard(独立lucene实例)完成queryfetch再返回,只通信一次,代价是查询from:0 size:
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值