首页 > Solr_全文检索引擎系统

Solr_全文检索引擎系统

Solr介绍:

Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务。Solr可以独立运行在Jetty、Tomcat等这些Servlet容器中。

 

Solr的作用:

solr是一个现成的全文检索引擎系统, 放入tomcat下可以独立运行, 对外通过http协议提供全文检索服务(就是对索引和文档的增删改查服务), 在代码中可以通过solrJ(solr的客户端的jar包)来调用solr服务。

 

Lucene和solr的区别:

lucene是一个全文检索引擎工具包, 就是一堆jar包, 它放入tomcat下不能独立运行, 但是我们可以使用lucene来构建全文检索引擎系统;

solr底层是用lucene来开发的一个全文检索引擎系统, 放入tomcat下就可以独立运行, 对外通过http的形式,提供全文检索服务(索引和文档的增删改查服务)。

 

在Tomcat容器中部署solr工程的步骤:

1、下载solr压缩包,下载地址:http://archive.apache.org/dist/lucene/solr/(我这里使用的是solr-4.10.3);

2、准备好一个干净的Tomcat容器,并配置好JDK;

3、找到solr解压后的目录,将solr-4.10.3examplewebapps目录下的solr.war包放进Tomcat容器中运行,直接运行的目的是解压该war包,解压好之后关闭Tomcat容器并删除war包(必须要删除war包,否则再次运行时就覆盖了以前配置好的solr服务),开始部署solr服务;

4、找到solr解压后的目录,将solr-4.10.3examplelibext目录下的所有jar包复制到Tomcat容器下的solr项目中的WEB-INF/lib目录下

5、为solr服务准备家目录,找打solr解压后的目录,将solr-4.10.3example目录下的有一个名称为solr的目录直接拷贝到硬盘根目录下,并且命名为solrHome(一般推荐这样做);

6、开始配置solr服务,找到Tomcat容器中部署的solr项目中的WEB-INF/web.xml文件,进行配置,首先打开标签,并且将刚刚拷贝好的solr的家目录的路径配置进去。

 

  <env-entry><env-entry-name>solr/homeenv-entry-name><env-entry-value>G:solrHomeenv-entry-value><env-entry-type>java.lang.Stringenv-entry-type>env-entry>

 

7、启动Tomcat容器,并通过http://127.0.0.1:8080/solr地址访问即可,如果看到以下界面则配置成功。

 

8、 solr服务配置成功之后,就会默认有一个collection1的实例,如果需要的话也可以配置多个,将solrHome目录下的collection1目录拷贝多个并将每个目录下的core.properties配置文件中修改一下即可,记得重启Tomcat容器。

 

 

通过SolrJ操作并访问solr服务中的数据:

什么是solrj?

solrj是访问solr服务的Java客户端,提供索引和搜索的请求方法。

 

 

创建工程,并引入solrj所需的jar包:

 

需求一:向solr服务中的collection1实例中添加数据?

 1   //向solr服务器中的collection1实例中添加数据
 2     @Test
 3     public void add() throws Exception{
 4         //1、创建与solr服务器的连接
 5         /*
 6          * http://localhost:8080/solr默认连接的是collection1实例
 7          * 如果想连接其他的实例,如collection2、collection3则在连接时必须指定:http://localhost:8080/solr/实例名称
 8          */
 9         SolrServer server = new HttpSolrServer("http://localhost:8080/solr");
10         
11         //2、创建solr的文档对象并添加数据
12         SolrInputDocument document = new SolrInputDocument();
13         document.addField("id", "003");
14         document.addField("title", "solr");
15         
16         //3、将文档对象添加到solr服务器
17         server.add(document);
18         
19         //4、提交
20         server.commit();
21     }

需求二:修改solr服务中collection3实例中的数据?

 1 //修改solr服务器上collection3实例中的数据
 2     @Test
 3     public void update() throws Exception{
 4         //1、连接solr服务器上collection3实例中的数据
 5         SolrServer server = new HttpSolrServer("http://localhost:8080/solr/collection3");
 6         //2、创建solr的文档对象并将数据修改
 7         SolrInputDocument document = new SolrInputDocument();
 8         document.addField("id", "001");
 9         document.addField("title", "博学谷");
10         //3、将文档对象添加到solr服务器
11         server.add(document);
12         //4、提交
13         server.commit();
14     }

需求三:对solr服务中的数据进行删除操作,根据id删除、删除所有数据?

 1   //删除solr服务器上collection2实例中的指定数据:
 2     @Test
 3     public void delete() throws Exception{
 4         //1、连接solr服务器
 5         SolrServer server = new HttpSolrServer("http://localhost:8080/solr/collection2");
 6         //2、根据id删除数据
 7         server.deleteById("002");
 8         //3、提交
 9         server.commit();
10     }
11     
12     //删除solr服务器上collection1实例中的所有数据:
13     @Test
14     public void deleteAll() throws Exception{
15         //1、连接solr服务器
16         SolrServer server = new HttpSolrServer("http://localhost:8080/solr/collection1");
17         //2、删除指定实例下的所有数据
18         server.deleteByQuery("*:*");
19         //3、提交
20         server.commit();
21     }

需求四:检索solr服务中collection3实例中的全部数据?

 1   //查询solr服务器上collection3实例中所有的数据:
 2     @Test
 3     public void findAll() throws Exception{
 4         //1、连接solr服务器
 5         SolrServer server = new HttpSolrServer("http://localhost:8080/solr/collection3");
 6         //2、创建查询对象
 7         SolrQuery query = new SolrQuery();
 8         //3、给查询对象中设置查询条件
 9         query.setQuery("*:*");
10         //4、查询并获取响应
11         QueryResponse response = server.query(query);
12         //5、从响应中获得结果集
13         SolrDocumentList results = response.getResults();
14         //6、处理结果集
15         //输出结果集的总查询条数
16         System.out.println(results.getNumFound());
17         for (SolrDocument solrDocument : results) {
18             System.out.println("id*************"+solrDocument.get("id"));
19             System.out.println("title**********"+solrDocument.get("title"));
20             System.out.println("===========================================");
21         }
22     }

 

转载于:https://www.cnblogs.com/1315925303zxz/p/6246458.html

更多相关:

  • 一、solr单机版的搭建  1.运行环境     solr 需要运行在一个Servlet容器中,Solr4.10.3要求jdk使用1.7以上,Solr默认提供Jetty(ja),本教va写的Servlet容器程使用Tocmat作为Servlet容器,环境如下:     Solr:Solr4.10.3     Jdk:jdk1.7.0...

  • 这周本来是要写一篇Dubbo源码分析的,被突发事件耽搁了,下周有时间再补上。这周,笔者经历了一次服务雪崩。服务雪崩,听到这个词就能想到问题的严重性。是的,整个项目,整条业务线都挂了,从该业务线延伸出来的下游业务线也跟着凉了。笔者是连续三天两夜的忙着处理问题,加起来睡眠时间不足5小时,今天才得以睡个好觉。但事故之后还有很多问题等着去...

  •     由于工作中需要直接从MySQL后台读取数据,所以安装了PHPnow,装的过程中提示Apache安装失败,80端口被占用。     在cmd中输入netstat –ano命令,发现80端口被一个PID为4的服务所占用,打开任务管理器,发现PID为4的进程为系统进程,其描述信息为NT Kernel & System,在服务里面又...

  • Dubbo 2.7 版本增加新特性,新系统开始使用 Dubbo 2.7.1 尝鲜新功能。使用过程中不慎踩到这个版本的 Bug。 系统架构 Spring Boot 2.14-Release + Dubbo 2.7.1 现象 Dubbo 服务者启动成功,正常提供服务,消费者调用偶现失败的情况。错误如下图: 可以看出,主要原因为 ca...

  • 越来越多的软件,开始采用云服务。 云服务只是一个统称,可以分成三大类。 IaaS:基础设施服务,Infrastructure-as-a-servicePaaS:平台服务,Platform-as-a-serviceSaaS:软件服务,Software-as-a-service 它们有什么区别呢? IBM 的软件架构师 Albert...

  • Docker最全教程——从理论到实战(六) 原文:Docker最全教程——从理论到实战(六)托管到腾讯云容器服务 托管到腾讯云容器服务,我们的公众号“magiccodes”已经发布了相关的录屏教程,大家可以结合本篇教程一起查阅。 自建还是托管? 在开始之前,我们先来讨论一个问题——是自建容器服务还是托管到云容器服务? 这里...

  • 本文是西门子开放式TCP通信的第2篇,上一篇我们讲了使用西门子1200PLC作为TCP服务器的程序编写,可以点击下方链接阅读:【公众号dotNet工控上位机:thinger_swj】基于Socket访问西门子PLC系列教程(一)在完成上述步骤后,接下来就是编写上位机软件与PLC之间进行通信。上位机UI界面设计如下图所示:从上图可以看出...

  • 我有一个大型数据集,列出了在全国不同地区销售的竞争对手产品。我希望通过使用这些新数据帧名称中的列值的迭代过程,根据区域将该数据帧分成几个其他区域,以便我可以分别处理每个数据帧-例如根据价格对每个地区的信息进行排序,以了解每个地区的市场情况。我给出了以下数据的简化版本:Competitor Region ProductA Product...

  • 作为一名IT从业者,我来回答一下这个问题。首先,对于具有Java编程基础的人来说,学习Python的初期并不会遇到太大的障碍,但是要结合自己的发展规划来制定学习规划,尤其要重视学习方向的选择。Java与Python都是比较典型的全场景编程语言,相比于Java语言来说,当前Python语言在大数据、人工智能领域的应用更为广泛一些,而且大...

  • 这段时间通过学习相关的知识,最大的变化就是看待事物更加喜欢去了解事物后面的本质,碰到问题后解决问题思路也发生了改变。举个具体的例子,我在学习数据分析,将来会考虑从事这方面的工作,需要掌握的相关专业知识这个问题暂且按下不表,那哪些具体的问题是我需要了解的呢,以下简单罗列:1、了解数据分析师这个岗位在各个地区的需求情况?2、数据分析师的薪...

  • 这一节将开始学习python的一个核心数据分析支持库---pandas,它是python数据分析实践与实战的必备高级工具。对于使用 Python 进行数据分析来说,pandas 几乎是无人不知,无人不晓的。今天,我们就来认识认识数据分析界鼎鼎大名的 pandas。目录一. pandas主要数据结构 SeriesDataFrame二...