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

article/2025/9/18 21:24:21

Solr

什么是Solr

Solr是一个开源搜索平台,用于构建搜索应用程序。 它建立在Lucene(全文搜索引擎)之上。 Solr是企业级的,快速的和高度可扩展的。 使用Solr构建的应用程序非常复杂,可提供高性能。

为了在CNET网络的公司网站上添加搜索功能,Yonik Seely于2004年创建了Solr。并在2006年1月,它成为Apache软件基金会下的一个开源项目。并于2016年发布最新版本Solr 6.0,支持并行SQL查询的执行。

Solr可以和Hadoop一起使用。由于Hadoop处理大量数据,Solr帮助我们从这么大的源中找到所需的信息。不仅限于搜索,Solr也可以用于存储目的。像其他NoSQL数据库一样,它是一种非关系数据存储和处理技术。


以上是官方文档对Sor的解释,简单来说Solr就是一个很强的全文检索工具,就比如我刚刚在百度词条的搜索框搜索Solr这个过程就是依赖于Solr技术的。当然也不一定百度用的就是Solr工具,可能他用的更强一点哈哈(直白?)

Solr存在的意义是什么

由于大多数搜索引擎应用都必须具有某种搜索功能,问题是搜索功能往往是巨大的资源消耗并且它们由于沉重的数据库加载而拖垮你的应用的性能。

这样转移负载到一个外部的搜索服务器就是一个不错的主意了,Solr是一个流行的开源搜索服务器,它通过使用类似REST的HTTP API,这也就确保你能从几乎任何编程语言来使用solr。

总之,Solr是一个可扩展的,可部署,搜索/存储引擎,优化搜索大量以文本为中心的数据。

举例

举个例子:现在有几个文档,我想从这几个文档中查找出包含“solr工作原理”的文档,此时有两种做法:

  • 顺序扫描法:对这几个文档依次查找,包含目标字段的文档就记录下来,最后查找的结果可能在这几个文档中,这种查找方式叫做顺序扫描法。
    顺序扫描法在文档数量较少的情况下,查找速度还是很快的,但是文档数量很多时,查找速度就明显不行了。

  • 全文检索:对文档内容进行分词,对分词后的结果创建索引,然后通过对索引进行搜索的方式叫做全文检索。
    全文检索就相当于根据偏旁部首或读音去查找字典,在文档很多的情况,这种查找速度肯定比一个一个文档查找要快。

中文分析器IK Analyzer

就如上文所说,Solr会把一句话分割成多个分词,然后进行检索。这个划分分词的技术就是中文分析器IK Analyzer

IK Analyzer 是一个开源的,基亍 java 语言开发的轻量级的中文分词工具包。从 2006年 12 月推出 1.0 版开始, IKAnalyzer 已经推出了 4 个大版本。最初,它是以开源项目Luence 为应用主体的,结合词典分词和文法分析算法的中文分词组件。从 3.0 版本开始,IK 发展为面向 Java 的公用分词组件,独立亍 Lucene 项目,同时提供了对 Lucene 的默认优化实现。在 2012 版本中,IK 实现了简单的分词歧义排除算法,标志着 IK 分词器从单纯的词典分词向模拟语义分词衍化。

这个中文分析器需要对Solr进行配置的,不然Solr怎么会有这个技术呢是吧。

IK Analyzer配置

步骤:

  1. 把IKAnalyzer2012FF_u1.jar 添加到 solr 工程的 lib 目录下
  2. 创建WEB-INF/classes文件夹 把停用词词典stopword.dic、配置文件IKAnalyzer.cfg.xml放到 solr 工程的 WEB-INF/classes 目录下。
  3. 修改 Solrhome 的 schema.xml 文件,配置一个 FieldType,使用 IKAnalyzer
<fieldType name="text_ik" class="solr.TextField"><analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>

Solr运行原理

全文检索大体分为2个过程,索引创建搜索索引

  1. 索引创建:将现实世界中的所有结构化和非结构化数据提取信息,创建索引的过程

  2. 索引索引:就是得到用户查询的请求,搜索创建的索引,然后返回结果的过程

创建索引分析

举例

文档一内容:solr是基于Lucene开发的企业级搜索引擎技术

文档二内容:Solr是一个独立的企业级搜索应用服务器,Solr是一个高性能,基于Lucene的全文搜索服务器

首先经过分词器分词,solr会为分词后的结果(词典)创建索引,然后将索引和文档id列表对应起来,如下图所示:
在这里插入图片描述
分析过程:solr在文档1和文档2中都有出现,所以对应的文档ID列表中既包含文档1的ID也包含文档2的ID,文档ID列表对应到具体的文档,并体现该词典在该文档中出现的频次,频次越多说明权重越大,权重越大搜索的结果就会排在前面。

solr内部会对分词的结果处理:

  1. 去除停词和标点符号,例如英文的this,that等, 中文的”的”,”一”等没有特殊含义的词

  2. 会将所有的大写英文字母转换成小写,方便统一创建索引和搜索索引

  3. 将复数形式转为单数形式,比如students转为student,也是方便统一创建索引和搜索索引

创建索引的过程

  1. 有一系列被索引文件

  2. 被索引文件经过语法分析和语言处理形成一系列词(Term)。

  3. 经过索引创建形成词典和反向索引表。

  4. 通过索引存储将索引写入硬盘。

搜索索引

知道了创建索引的过程,那么根据索引进行搜索就变得简单了。

  1. 用户在搜索框输入关键字进行搜索动作
  2. solr得到分词技术对用户输入的关键字或关键语句进行分词切割处理
  3. 然会对处理后的分词结果创建索引
  4. 然后根据索引找到文档ID列表
  5. 最后在根据文档ID列表找到具体的文档内容,然后通过权重分析,顺序向下排列将结果返回给用户

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

相关文章

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

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

UML入门以及Plant UML工具介绍

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

UML工具 Astah Professional8.0下载

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

免费 UML 工具

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

十二个开源UML工具

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

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

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

UML图及UML工具使用技巧

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

推荐Ubuntu使用UML工具-Drawio

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

小瞥linux下UML工具

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

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

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

UML工具(1)-Umbrello

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

Uml工具StarUML破解

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

免费的UML工具

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

免费且好用的UML工具推荐

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

UML建模工具

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

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

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

UML工具

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

UML画图工具汇总

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

UML建模工具最近更新汇总(-2022年7月)共16款:Visual State、UML Diagrammer……

DDD领域驱动设计批评文集>> 《软件方法》强化自测题集>> 《软件方法》各章合集>> UMLChina整理的UML建模工具列表请见http://www.umlchina.com/tools/search.aspx 最近一段时间更新&#xff1a; 工具最新版本&#xff1a;GoJS 2.2.12 更新时间&#xff…

git删除本地分支和删除远程分支

切换到master分支 git checkout master 查看已有的本地及远程分支 git branch -a 删除远程分支 git push origin --delete dev 删除后&#xff0c;再次查看分支情况 git branch -a 删除本地分支 git branch -D dev 远程分支和本地分支删除完毕