逖靖寒的世界

每天进步一点点

导航

统计

Solr分布式搜索技术实现分析

概述

Solr单机支持的搜索数据量是有一定上限的,这个取决于搜索的复杂程度,服务器的硬件配置与业务的要求等等,所以将搜索功能分布化将是对于大数据搜索的一个必然趋势。

Solr1.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 keydoc结果将随机返回。
  • 搜索结果不要有过多的翻页。因为Solr的分布式搜索中,会将需要翻页排序后的总结果全部返回给proxy solr server进行汇总排序,如果翻页过多,那么对网络带宽将会照成一定的压力。
  • 注意HTTP连接数。因为Solr的分布式搜索中,服务器可能既是search server又是proxy server,一遍等待http请求应答有一遍处理http请求,多台服务器之间就可能会出现死锁。

分布式搜索逻辑实现

Query component的实现原则为:Multi-phased approach, allowing for inconsistency,具体的实现细节如下:

  1. 客户端发送搜索请求给Solr集群中的任意一台服务器SP
  2. SP服务器处理分布式查询请求
    1. Phase One
      1. 构建查询请求,只获取查询Docunique keysort field字段。
      2. 将构建好的请求通过HTTP发送给每一个Solr Shard节点。
      3. 等待Solr Shard节点返回查询结果。
      4. 根据排序规则,逐个合并Solr Shard节点返回的查询结果。
    2. Phase Two
      1. 构建查询请求,根据unique key查询客户端查询的相关字段数据。
      2. 将构建好的请求通过HTTP发送给每一个需要请求的Solr Shard节点。
      3. 等待Solr Shard节点返回查询结果。
      4. 逐个合并Solr Shard节点返回的查询结果,构建本次查询的最终结果。
      5. SP服务器将分布式查询结果返回给客户端

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

参考文档

posted on   逖靖寒  阅读(9328)  评论(4编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示