Solr的工作原理以及如何管理索引库

article/2025/9/18 21:27:31

1. Solr的简介

​ Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。

​ Solr是Apache软件基金会下的子项目之一。
在这里插入图片描述

2. 工作原理

​ solr是基于Lucence开发的企业级搜索引擎技术,而lucence的原理是倒排索引。那么什么是倒排索引呢?接下来我们就介绍一下lucence倒排索引原理。

假设有两篇文章1和2:

文章1的内容为:老超在卡子门工作,我也是。

文章2的内容为:小超在鼓楼工作。

由于lucence是基于关键词索引查询的,那我们首先要取得这两篇文章的关键词。如果我们把文章看成一个字符串,我们需要取得字符串中的所有单词,即分词。分词时,忽略”在“、”的“之类的没有意义的介词,以及标点符号可以过滤。

我们使用Ik Analyzer实现中文分词,分词之后结果为:

文章1:在这里插入图片描述

文章2:
在这里插入图片描述

接下来,有了关键词后,我们就可以建立倒排索引了。上面的对应关系是:“文章号”对“文章中所有关键词”。倒排索引把这个关系倒过来,变成: “关键词”对“拥有该关键词的所有文章号”。

文章1、文章2经过倒排后变成:
在这里插入图片描述

通常仅知道关键词在哪些文章中出现还不够,我们还需要知道关键词在文章中出现次数和出现的位置,通常有两种位置:

a.字符位置,即记录该词是文章中第几个字符(优点是关键词亮显时定位快);

b.关键词位置,即记录该词是文章中第几个关键词(优点是节约索引空间、词组(phase)查询快),lucene中记录的就是这种位置。

加上出现频率和出现位置信息后,我们的索引结构变为:
在这里插入图片描述

实现时,lucene将上面三列分别作为词典文件(Term Dictionary)、频率文件(frequencies)、位置文件 (positions)保存。其中词典文件不仅保存有每个关键词,还保留了指向频率文件和位置文件的指针,通过指针可以找到该关键字的频率信息和位置信息。

3. 使用SolrJ管理索引库

使用SolrJ可以实现索引库的增删改查操作。

3.1 添加文档

第一步:把solrJ的jar包添加到工程中。

第二步:创建一个SolrServer,使用HttpSolrServer创建对象。

第三步:创建一个文档对象SolrInputDocument对象。

第四步:向文档中添加域。必须有id域,域的名称必须在schema.xml中定义。

第五步:把文档添加到索引库中。

第六步:提交。

@Test
public void testSolrJAdd() throws SolrServerException, IOException {// 创建一个SolrServer对象。创建一个HttpSolrServer对象// 需要指定solr服务的urlSolrServer solrServer = new HttpSolrServer("http://101.132.69.111:8080/solr/collection1");// 创建一个文档对象SolrInputDocumentSolrInputDocument document = new SolrInputDocument();// 向文档中添加域,必须有id域,域的名称必须在schema.xml中定义document.addField("id", "123");document.addField("item_title", "红米手机");document.addField("item_price", 1000);// 把文档对象写入索引库solrServer.add(document);// 提交solrServer.commit();
}

3.2 删除文档

3.2.1 根据id删除

第一步:创建一个SolrServer对象。

第二步:调用SolrServer对象的根据id删除的方法。

第三步:提交。

@Test
public void deleteDocumentById() throws Exception {SolrServer solrServer = new HttpSolrServer("http://101.132.69.111:8080/solr/collection1");solrServer.deleteById("123");// 提交solrServer.commit();
}

3.2.2 根据查询删除

@Test
public void deleteDocumentByQuery() throws Exception {SolrServer solrServer = new HttpSolrServer("http://101.132.69.111:8080/solr/collection1");//这边会根据分词去删solrServer.deleteByQuery("item_title:红米手机");solrServer.commit();
}

3.3 查询索引库

第一步:创建一个SolrServer对象

第二步:创建一个SolrQuery对象。

3 向SolrQuery中添加查询条件、过滤条件。。。

第四步:执行查询。得到一个Response对象。

5 取查询结果。

第六步:遍历结果并打印。

3.3.1 简单查询

@Test
public void queryDocument() throws Exception {// 第一步:创建一个SolrServer对象SolrServer solrServer = new HttpSolrServer("http://101.132.69.111:8080/solr/collection1");// 第二步:创建一个SolrQuery对象。SolrQuery query = new SolrQuery();// 第三步:向SolrQuery中添加查询条件、过滤条件。。。query.setQuery("*:*");// 第四步:执行查询。得到一个Response对象。QueryResponse response = solrServer.query(query);// 第五步:取查询结果。SolrDocumentList solrDocumentList = response.getResults();System.out.println("查询结果的总记录数:" + solrDocumentList.getNumFound());// 第六步:遍历结果并打印。for (SolrDocument solrDocument : solrDocumentList) {System.out.println(solrDocument.get("id"));System.out.println(solrDocument.get("item_title"));System.out.println(solrDocument.get("item_price"));}
}

3.3.2 带高亮显示

@Test
public void searchDocumet() throws Exception {// 创建一个SolrServer对象SolrServer solrServer = new HttpSolrServer("http://101.132.69.111:8080/solr/collection1");// 创建一个SolrQuery对象SolrQuery query = new SolrQuery();// 设置查询条件、过滤条件、分页条件、排序条件、高亮// query.set("q", "*:*");query.setQuery("手机");// 分页条件query.setStart(0);query.setRows(30);// 设置默认搜索域query.set("df", "item_keywords");// 设置高亮query.setHighlight(true);// 高亮显示的域query.addHighlightField("item_title");query.setHighlightSimplePre("<div>");query.setHighlightSimplePost("</div>");// 执行查询,得到一个Response对象QueryResponse response = solrServer.query(query);// 取查询结果SolrDocumentList solrDocumentList = response.getResults();// 取查询结果总记录数System.out.println("查询结果总记录数:" + solrDocumentList.getNumFound());for (SolrDocument solrDocument : solrDocumentList) {System.out.println(solrDocument.get("id"));// 取高亮显示Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();List<String> list = highlighting.get(solrDocument.get("id")).get("item_title");String itemTitle = "";if (list != null && list.size() > 0) {itemTitle = list.get(0);} else {itemTitle = (String) solrDocument.get("item_title");}System.out.println(itemTitle);System.out.println(solrDocument.get("item_sell_point"));System.out.println(solrDocument.get("item_price"));System.out.println(solrDocument.get("item_image"));System.out.println(solrDocument.get("item_category_name"));System.out.println("=============================================");}
}

4. Solr服务器中的后台数据处理

​ 这个其实是通过图形界面操作,只需手动填写查询条件,不需要进行代码处理。但是实际项目开发中,还是需要进行代码编写的。
在这里插入图片描述

4.1 solr的基础语法

q  查询的关键字,此参数最为重要,例如,q=id:1,默认为q=*:*,fq  (filter query)过虑查询,提供一个可选的筛选器查询。返回在q查询符合结果中同时符合的fq条件的查询结果sort  排序方式,例如id  desc 表示按照 “id” 降序start  返回结果的第几条记录开始,一般分页用,默认0开始rows  指定返回结果最多有多少条记录,默认值为 10,配合start实现分页fl  指定返回哪些字段,用逗号或空格分隔,注意:字段区分大小写,例如,fl= id,title,sortdf   默认的查询字段,一般默认指定wt  (writer type)指定输出格式,有 xml, json, php等indent   返回的结果是否缩进,默认关闭hl 高亮hl.fl  设定高亮显示的字段hl.requireFieldMatch   如果置为true,除非用hl.fl指定了该字段,查询结果才会被高亮。它的默认值是false。hl.usePhraseHighlighter   如果一个查询中含有短语(引号框起来的)那么会保证一定要完全匹配短语的才会被高亮。hl.highlightMultiTerm如果使用通配符和模糊搜索,那么会确保与通配符匹配的term会高亮。默认为false,同时hl.usePhraseHighlighter要为true。hl.fragsize   返回的最大字符数。默认是100.如果为0,那么该字段不会被fragmented且整个字段的值会被返回。

源码、更多资深讲师相关课程资料、学习笔记请入群后向管理员免费获取,更有专业知识答疑解惑。入群即送价值499元在线课程一份。
QQ群号:560819979
敲门砖(验证信息):秋日私语


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

相关文章

solr底层原理

一、总论 根据http://lucene.apache.org/java/docs/index.html定义&#xff1a; Lucene是一个高效的&#xff0c;基于Java的全文检索库。 所以在了解Lucene之前要费一番工夫了解一下全文检索。 那么什么叫做全文检索呢&#xff1f;这要从我们生活中的数据说起。 我们生活中…

全文搜索引擎Solr原理和实战教程

Solr简介 1.Solr是什么? Solr它是一种开放源码的、基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中。Solr 提供了层面搜索(就是统计)、命中醒目显示并且支持多种输出格式(包括XML/XSLT 和JSON等格式)。Solr是一个高性能,采用Java开发, 基于Lucene的全文搜索服务…

solr全文检索实现原理

solr那是我1年前使用到的一个搜索引擎&#xff0c;由于当初对于配置了相应了&#xff0c;但是今天突然面试问到了&#xff0c;哎&#xff0c;太久了&#xff0c;真的忘记了&#xff0c;今天特地写一篇博客记下来 solr是一个独立的企业级搜索应用服务器&#xff0c;它对外t提供…

Solr工作原理

Solr简介 Solr是一个独立的企业级搜索应用服务器&#xff0c;它对外提供类似于Web-service的API接口。用户可以通过http请求&#xff0c;向搜索引擎服务器提交一定格式的XML文件&#xff0c;生成索引&#xff1b;也可以通过Http Get操作提出查找请求&#xff0c;并得到XML格式…

Solr的原理及使用

1.Solr的简介 Solr是一个独立的企业级搜索应用服务器&#xff0c;它对外提供类似于Web-service的API接口。用户可以通过http请求&#xff0c;向搜索引擎服务器提交一定格式的XML文件&#xff0c;生成索引&#xff1b;也可以通过Http Get操作提出查找请求&#xff0c;并得到XML格…

Solr原理剖析

一、简介 Solr是一个高性能、基于Lucene的全文检索服务器。Solr对Lucene进行了扩展&#xff0c;提供了比Lucene更为丰富的查询语言&#xff0c;并实现了强大的全文检索功能、高亮显示、动态集群&#xff0c;具有高度的可扩展性。同时从Solr 4.0版本开始&#xff0c;支持SolrCl…

solr的基本原理

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

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

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

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 安装…