Solr 分布式分发原理

from http://ronxin999.blog.163.com/blog/static/4221792020118131129725/?suggestedreading


如果你的请求URL中有shards参数,例如q=aa&shards=http://localhost:8787/solr,http://localhost:8783/solr,
则说明当前是分布式请求。Solr会对每个shard片(对应一个Solr应用)发起两次请求,这个过程在QueryComponent组件里实现。
QueryComponent 把请求分为几步,其中有两步分别是makequery和getfield,

makequery

SearchHander会先通过QueryComponent的一个方法创建一个发给shard的请求,其中比较关键的是会给url带上查询参数fl=id,score根据情况是否会带,我们知道fl是代表只返回那些field,Solr会取schema配置文件的uniquerField,所以这次请求就只返回id的值。得到id值后,QueryComponent会合并id,如果不同的shard有相同的id,则会只取一个。到这里只是完成了makequery这一。

getfield

然后SearchHander会做getField这一步,getField是通过QueryComponent来封装请求参数,其中最关键的是封装ids参数,即根据上面请求得到的ids参数把他作为值放到url里,再一次发请求根据id来取对应的field,我们知道solr有个filterCache过滤器。就是这个时候派上用场的。

本文写的比较简单,只是对研读的代码做了下总结,下面会继续完善。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值