设为首页 收藏本站
查看: 1313|回复: 0

[经验分享] Solr分布式搜索技术实现分析

[复制链接]

尚未签到

发表于 2015-7-16 11:40:00 | 显示全部楼层 |阅读模式
概述
Solr单机支持的搜索数据量是有一定上限的,这个取决于搜索的复杂程度,服务器的硬件配置与业务的要求等等,所以将搜索功能分布化将是对于大数据搜索的一个必然趋势。
Solr从1.3版本开始,自带了分布式搜索(Distributed Search)。这个功能使得Solr能够通过多服务器进行横行扩展,对数据进行水平拆分,从而支持海量数据的搜索功能。
Solr-3.6.1版本对分布式搜索的支持功能如下:
搜索功能模块
是否支持分布式搜索
Query component
Y
Facet component
Y
Highlighting component
Y
Spell Check Component
Y
Terms Component
Y
Stats component
Y
Term Vector Component
Y
Debug component
Y
Grouping component
Y
QueryElevationComponent
N
MoreLikeThis
N
Join
N
由于业务功能和时间的缘故,本文将只讨论Query component的技术实现逻辑。
注意事项
在使用Solr进行分布式搜索的时候,需要注意以下细节:

  • schema.xml中定义的unique key必须保存在索引中。因为Solr在进行2nd phrase搜索时需要使用这个unique key进行数据一致性的二次确认与获取搜索要求查询的字段数据。
  • 分布在不同服务器中的索引文件中包含的unique key不要有重复。因为Solr在进行1st phrase搜索时需要根据这些unique key进行排序与去重,如果unique key有重复,包含相同unique key的doc结果将随机返回。
  • 搜索结果不要有过多的翻页。因为Solr的分布式搜索中,会将需要翻页排序后的总结果全部返回给proxy solr server进行汇总排序,如果翻页过多,那么对网络带宽将会照成一定的压力。
  • 注意HTTP连接数。因为Solr的分布式搜索中,服务器可能既是search server又是proxy server,一遍等待http请求应答有一遍处理http请求,多台服务器之间就可能会出现死锁。
分布式搜索逻辑实现
Query component的实现原则为:Multi-phased approach, allowing for inconsistency,具体的实现细节如下:

  • 客户端发送搜索请求给Solr集群中的任意一台服务器SP。
  • SP服务器处理分布式查询请求

    • Phase One

      • 构建查询请求,只获取查询Doc的unique key与sort field字段。
      • 将构建好的请求通过HTTP发送给每一个Solr Shard节点。
      • 等待Solr Shard节点返回查询结果。
      • 根据排序规则,逐个合并Solr Shard节点返回的查询结果。

    • Phase Two

      • 构建查询请求,根据unique key查询客户端查询的相关字段数据。
      • 将构建好的请求通过HTTP发送给每一个需要请求的Solr Shard节点。
      • 等待Solr Shard节点返回查询结果。
      • 逐个合并Solr Shard节点返回的查询结果,构建本次查询的最终结果。
      • SP服务器将分布式查询结果返回给客户端


注意:当前的版本中,分布式查询中如果有某一个Shard异常,整体的查询将失败。
参考文档

  • http://wiki.apache.org/solr/DistributedSearch
  • http://wiki.apache.org/solr/WritingDistributedSearchComponents
  • http://wiki.apache.org/solr/DistributedSearchDesign
  • Solr-3.6.1源码

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-87268-1-1.html 上篇帖子: 七、Solr服务部署和安全 下篇帖子: solr Query[转]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表