Solr原理剖析

article/2025/9/18 21:28:57

一、简介

Solr是一个高性能、基于Lucene的全文检索服务器。Solr对Lucene进行了扩展,提供了比Lucene更为丰富的查询语言,并实现了强大的全文检索功能、高亮显示、动态集群,具有高度的可扩展性。同时从Solr 4.0版本开始,支持SolrCloud模式,该模式下能够进行集中式的配置信息、近实时搜索、自动容错等功能:

  • 利用ZooKeeper作为协同服务,启动时可以指定把Solr的相关配置文件上传ZooKeeper,多机器共用。这些ZooKeeper中的配置不会再拿到本地缓存,Solr直接读取ZooKeeper中的配置信息。配置文件的变动,所有机器都可以感知到。
  • 自动容错,SolrCloud对索引(collection)进行分片(shard),并对每个分片创建多个Replica。一个Replica出现异常并不会影响整个索引搜索服务,每个Replica都可以独立对外提供服务。
  • 索引和查询时的自动负载均衡,SolrCloud索引(collection)的多个Replica可以分布在多台机器上,均衡索引和查询压力。如果索引和查询压力大,可以通过扩展机器,增加Replica来减缓压力。因此,下面的介绍主要是围绕SolrCloud展开描述的。
  • Solr索引数据存储方法有多种,利用HDFS作为其索引文件的存储系统,提供高可靠性、高性能、可伸缩、准实时的全文检索系统;存放到本地磁盘,提供了更加快速的索引和查询速度。

Solr集群方案SolrCloud由多个SolrServer进程组成,如下图所示,模块说明如下表所示。
在这里插入图片描述

名称说明
ClientClient使用HTTP或HTTPS协议同Solr集群(SolrCloud)中的SolrServer进行通信,进行分布式索引和分布式搜索操作。
SolrServerSolrServer负责提供创建索引和全文检索等服务,是Solr集群中的数据计算和处理单元。
ZooKeeper集群ZooKeeper为Solr集群中各进程提供分布式协作服务。各SolrServer将自己的信息(collection配置信息、SolrServer健康信息等)注册到ZooKeeper中,Client据此感知各个SolrServer的健康状态来决定索引和搜索请求的分发。

二、Solr基本概念

  • Collection:在SolrCloud集群中逻辑意义上的完整的索引。它可以被划分为一个或者多个Shard,它们使用相同的Config
    Set。
  • Config Set:Solr Core提供服务必须的一组配置文件。包括solrconfig.xml和managed-schema等。
  • Core:即Solr Core,一个Solr实例中包含一个或者多个Solr Core,每个Solr
    Core可以独立提供索引和查询功能,每个Solr Core对应一个索引或者Collection的Shard的副本(replica)。
  • Shard:Collection的逻辑分片。每个Shard都包含一个或者多个replicas,通过选举确定哪个是Leader。
  • Replica:Shard的拷贝。一个Replica存在于Solr的一个Core中。
  • Leader:赢得选举的Shard
    replicas。当索引documents时,SolrCloud会传递它们到此Shard对应的leader,leader再分发它们到Shard的全部replicas。
  • ZooKeeper:它在SolrCloud是必须的,提供分布式锁、处理Leader选举等功能。

三、Solr原理

倒排序索引

传统的搜索方式(正排序索引,如下图所示)是从关键点出发,然后再通过关键点找到关键点代表的信息中能够满足搜索条件的特定信息,即通过KEY寻找VALUE。通过正排序索引进行搜索,就是从通过文档编号找关键词。
在这里插入图片描述
而Solr(Lucene)的搜索则是采用了倒排序索引(如下图所示)的方式,即通过VALUE找KEY。而在中文全文搜索中VALUE就是要搜索的关键词,存放所有关键词的地方叫词典。KEY是文档标号列表(通过文档标号列表可以找到出现过要搜索关键词–VALUE的文档),具体如下面的图所示:通过倒排序索引进行搜索,就是通过关键词查询相对应的文档编号,再通过文档编号找文档,类似于查字典,或通过查书目录查指定页码书的内容。
倒排序索引

分布式索引操作流程

Solr分布式索引操作流程如下图所示。
在这里插入图片描述
操作流程说明如下:

  1. 当Client发起一次文档索引请求时,首先将从ZooKeeper集群中获取SolrCloud中SolrServer的集群信息,根据请求中的collection信息,获取任意一台包含该collection信息的SolrServer;
  2. Client把文档索引请求发送给SolrServer中该collection对应shard中的一个Replica进行处理;
  3. 如果该Replica不是Leader Replica,则该Replica会把文档索引请求再转发给和自己相同shard中相对应的Leader Replica;
  4. 该Leader Replica在本地完成文档的索引后,会再把文档索引请求路由给本Shard中的其他Replica进行处理;
  5. 如果该文档索引的目标shard并不是本次请求的Shard,那么该Shard的Leader Replica会将文档索引请求再次转发给目标Shard的Leader Replica;
  6. 目标Shard的Leader Replica在本地完成文档的索引后,会再把文档索引请求再次路由给本Shard的其他Replica进行处理。

分布式搜索操作流程:

Solr分布式搜索操作流程如下图所示。
在这里插入图片描述
操作流程说明如下:

  1. 当Client发起一次搜索请求时;Client首先将通过ZooKeeper会获取到SolrServer服务器集群信息,并随机选取一个含有该collection的SolrServer;
  2. Client把搜索请求发送到该Collection在SolrServer上相对应Shard中的任意一个Replica(可以不为Leader
    Replica)进行处理;
  3. 该Replica再根据查询索引的方式,启动分布式查询,基于Collection的Shard个数(在上图中为2个,Shard1和Shard2),把查询转换为多个子查询,并把每个子查询分发到对应Shard的任意一个Replica(可以不为Leader
    Replica)中进行处理;
  4. 每个子查询完成查询操作后,并查询结果返回;
  5. 首次收到查询请求的Replica收到各个子查询的查询结果后,对各个查询结果进行合并处理,然后把最终的查询结果返回给Client。

四、Solr和HDFS的关系

Solr是Apache基金会下的项目,也是Apache Hadoop项目生态系统中重要的一员,Solr可利用HDFS作为其索引文件存储系统。Solr位于结构化存储层,HDFS为Solr提供了高可靠性的存储支持。Solr中的所有索引数据文件都可以存储在HDFS文件系统上。

五、Solr和HBase的关系

HBase提供海量数据存储功能,是一种构建在HDFS上的分布式、面向列的存储系统。Solr索引HBase数据是将HBase数据写到HDFS的同时,Solr建立相应的HBase索引数据。其中索引id与HBase数据的rowkey对应,保证每条索引数据与HBase数据的唯一,实现HBase数据的全文检索。


http://chatgpt.dhexx.cn/article/kY39cJdd.shtml

相关文章

solr的基本原理

solr介绍: solr是一个全局检索引擎,能够快速地从大量的文本数据中选出你所需要的数据,而你只需要提供相应的关键词进行检索。solr的高效率查询靠的是底层强大的索引库,所以solr最关键的技术也是其底层的索引设计。solr工作的时候可…

Solr的工作原理(最直白的解释,简单易懂)懂?

Solr 什么是Solr Solr是一个开源搜索平台,用于构建搜索应用程序。 它建立在Lucene(全文搜索引擎)之上。 Solr是企业级的,快速的和高度可扩展的。 使用Solr构建的应用程序非常复杂,可提供高性能。 为了在CNET网络的公司网站上添加搜索功能&…

Solr(一) Solr 简介及搜索原理

一、 Solr 简介 1 为什么使用 Solr 在海量数据下,对 MySQL 或 Oracle 进行模糊查询或条件查询的效率是很低的。而搜索功能在绝大多数项目中都是必须的,如何提升搜索效率是很多互联网项目必须要考虑的问题。 既然使用关系型数据库进行搜索效率比较低&a…

UML入门以及Plant UML工具介绍

简介 UML,Unified Modeling Language,可视化的统一建模语言,是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。而非程序设计语言,支持从需求分析开始的软件…

UML工具 Astah Professional8.0下载

UML工具 Astah Professional8.0下载 开头功能特性使用方法 文件下载链接 开头 由于Astah目前社区版被取消了,在这提供Professional 8.0版本。 Astah官网:https://astah.net/ 功能特性 1、在一个工具中做所有事情 不要为每个工作阶段切换工具。 做UML设…

免费 UML 工具

选取了四款UML工具: astah 经常看到网上的黄色背景就是这个软件画的,最后一个免费的社区版本是:astah community 7.2 安装包大小50M 以下三个均为免费版本: Software Ideas Modeler 可以画序列图,安装包很小,只有十几兆,而且提供便携版下载 Modelio 这是一个大型的…

十二个开源UML工具

本文将为您介绍12个优秀的UML工具: 1. StarUML StarUML(简称SU),是一种创建UML类图,是一种生成类图和其他类型的统一建模语言(UML)图表的工具。StarUML是一个开源项目之一发展快、灵活、可扩展性强(zj)。 2. Netbeans UML Plugin 目前支持&…

UML工具Visual Paradigm入门:业务流程建模 (BPM) 教程

Visual Paradigm是包含设计共享、线框图和数据库设计新特性的企业项目设计工具。现在你只需要这样单独的一款模型软件 Visual Paradigm就可以完成用UML设计软件,用BPMN去执行业务流程分析,用ERD企业设计数据库的任务。Visual Paradigm现已加入在线订购&a…

UML图及UML工具使用技巧

转自:UML图及UML工具使用技巧 Rational Rose 2003 之“Rational License key error”问题的解决方案 大家对UML这个可视化的建模语言应该不在陌生了。五种关系、九种图是UML的核心组成元素,而Rational Rose 是实现这些关系、图的重要工具。工具的重要性…

推荐Ubuntu使用UML工具-Drawio

最近在找一个免费的,漂亮的又能在ubuntu上使用的uml工具 先上一张图 网上搜索可以使用命令安装,个人没使用过 sudo snap install drawiosnap官网介绍:https://snapcraft.io/drawio 个人推荐直接在github直接下载最新版本的安装包 drawio的…

小瞥linux下UML工具

原文地址:https://blog.csdn.net/wangdingqiaoit/article/details/11991459 学习设计模式时,希望能好好练习类图,因此需要UML工具,linux下有很多uml工具,这里小瞥一眼,做个了解,并不打算并不全…

c++源码逆向UML工具踩坑

最近考虑走读一些源码,需要对源码类图结构关系首先有个大概了解,否则实在啃不下去,研究了几款逆向工具 个人MAC机,CSDN明确有几款,包括EA, starUML,Rational Rose ,Visual Paradigm 试了下Cr…

UML工具(1)-Umbrello

1、UML是统一建模语言,是一种可视化的语言。 2、各类工具对比。 工具名称 优点 缺点 Rational Rose 功能全,可以正向和逆向工程 收费&#xff0…

Uml工具StarUML破解

1、下载安装包 地址:http://staruml.io/download 2、安装,很简单,双击下载的包就可以安装了 3、破解(这里需要Nodejs的环境,如果你不是个程序员,没有环境,就先装个环境) 3.1 安装…

免费的UML工具

今天我想介绍一个100%完全免费的UML工具, 请不要认为Visual Paradigm Community Edition是一个免费工具,你猜它不够好 事实上,它多次获得国际奖项 - 其一个中国际奖项甚至击败IBM和 Borland国际震动奖(Jolt Award) Download Here在这里下载 Visual Paradigm社区版 - 免费的 U…

免费且好用的UML工具推荐

免费且好用的UML工具推荐 1、引言 统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。UML使用面向对象设计的的建模工具,但独立于任何具体…

UML建模工具

1、不收费的 编号软件名称软件连接备注1draw.io2eclipse的3亿图4Papyrushttp://www.eclipse.org/papyrus1、 支持UML 2.5但是UML官方没有UML2.5只有2.5.1;2、绘制UML 用例图当前个人没找到系统边界5StartUML6jetumlhttps://www.jetuml.org/ 2、收费的(…

用于敏捷开发的免费 UML 工具 2022

敏捷时代的UML:为什么它仍然有意义? 它取决于目标系统的大小和复杂性: 建造一个狗屋可以由一个人完成。它涉及一个简单的过程,使用诸如钉子、锤子、锯子、胶带等基本工具执行。在几个小时内,您就可以为狗建造一座房子…

UML工具

UML 工具 draw.io desktop (https://www.draw.io/) wiki中插件draw.ioprocessonplantuml idea插件(代码生成)graphvizyEd 架构图 定义:描述系统的业务/服务之间的逻辑关系 技巧:1. 虚线划分边界 2.颜色表示状态/角色 3.同一角色背景色相同 4.核心交互…

UML画图工具汇总

最近学习了UML,搜集了一把各类的画图工具以及它们的特点。最后选出我认为最好用的一款工具。 rose 《大象》书里面就是用的这款软件,但是这个貌似要钱,破解版版本很低,界面看起来也比较复古。不推荐。 star uml 挺有名的软件&…