基于Lucene的全文搜索服务器Solr

一、Solr的基本概念

1.Solr的基本概念

1.1 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;通过Http Get操作提出查找请求,并得到XML格式的返回结果。
1.2 Solr是apache的开源项目,它使用java语言开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,Solr可配置、可扩展并对查询性能进行了优化,提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。

2.Solr是如何实现全文检索的呢?

生成索引流程:  solr客户端(浏览器或者java程序)可以向solr服务端发送post请求,请求内容是包含Field等信息的xml文档,通过该文档,solr实现对索引的维护(增删改)
搜索流程	   :  solr客户端(浏览器或者java程序)可以向solr服务端发送Get请求,solr返回一个xml或者json文档

3.Solr和Lucene的区别

3.1 Lucene是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎.
3.2 Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;可以通过Http Solr Get操作提出查找请求,并得到XML格式的返回结果;
二、Solr的下载安装

1.1 solr的官网下载:https://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr

1.2 百度网盘下载
链接:https://pan.baidu.com/s/1K1yR69M-bc_eLCdDLjwuVA 
提取码:icgs


2.安装solr:解压solr-7.7.2.zip到指定的磁盘目录(不要带中文目录)。解压后的目录如下:

3.Solr的启动、停止和查看solr的运行状态

启动:  solr start
停止:  solr stop –all
查看solr运行状态:  solr status

如果成功访问http://localhost:8983/solr,说明solr服务器启动成功!

三、Solr与Tomcat的集成

由于solr服务器内置了Jetty服务器,但是我们常用tomcat服务器,所以我们需要将solr内置的jetty服务器替换成tomcat服务器。
1.停止当前solr运行进程 stop solr –all

2.将tomcat服务器复制到solr的目录下面

3.将当前tomcat服务器重新命名为apache-tomcat-8.5.50-solr-8081

4.修改复制过来的tomcat的端口号在conf目录中的server.xml中修改

修改之后进入D:\solr\apache-tomcat-8.5.50-solr-8081\bin目录下,点击startup.bat运行tomcat服务器,然后在浏览器输入http://localhost:8081/测试能否运行成功。
5.将solr目录下面的server目录下面的solr-webapp目录下面的webapp文件夹复制到tomcat的webapps目录下。

6.将复制过来的webapp目录命名为solr

7.将D:\solr\solr-7.7.2\server\lib目录下面的以metrics开头的、以gmetric开头的jar包全部复制到D:\solr\apache-tomcat-8.5.31-solr-8081\webapps\solr\WEB-INF\lib目录下面。

8.将D:\solr\solr-7.7.2\server\lib\ext的所有jar包复制到D:\solr\apache-tomcat-8.5.31-solr-8081\webapps\solr\WEB-INF\lib目录下面

9.在D:\solr\apache-tomcat-8.5.31-solr-8081\webapps\solr\WEB-INF中新建classes文件夹

10.将D:\solr\solr-7.7.2\server\resources中的log4j文件复制到D:\solr\apache-tomcat-8.5.31-solr-8081\webapps\solr\WEB-INF\classes文件夹中

11.创建solr_home文件夹

12.将D:\solr\solr-7.7.2\server\solr目录下面的所有文件(夹)拷贝至solr_home中。

13.将D:\solr\solr-7.7.2下面的contrib和dist文件夹拷贝至solr_home中

14.在solr_home中创建demo_core文件夹,并将D:\solr\solr_home\configsets\sample_techproducts_configs下面的conf文件夹复制到demo_core中。

15.修改D:\solr\solr_home\demo_core\conf下面的solrconfig.xml文件

16.修改D:\solr\apache-tomcat-8.5.50-solr-8081\webapps\solr\WEB-INF目录下面的web.xml文件加上一段配置

17.将D:\solr\apache-tomcat-8.5.50-solr-8081\webapps\solr\WEB-INF目录下面的web.xml文件中的如下部分注释掉

18.使用: http://localhost:8081/solr/index.html#能够访问solr的首页。说明安装成功。

19.如果闲配置太麻烦可以直接去下述的百度网盘中下载放入D盘即可使用

链接:https://pan.baidu.com/s/1f_Kk6TKbioTU0uWhYd_tcA 
提取码:w1vz
四、Solr导入数据并在浏览器中通过Query查询返回json数据

1.在Solr客户端中添加demo_core

2.将D:\solr\solr-7.7.2\dist下面的dataimport相关的jar包、mysql相关的驱动包复制到D:\solr\apache-tomcat-8.5.31-solr-8081\webapps\solr\WEB-INF\lib目录下面。


3.将D:\solr\solr-7.7.2\contrib\analysis-extras\lucene-libs目录下面的所有jar包复制到D:\solr\apache-tomcat-8.5.31-solr-8081\webapps\solr\WEB-INF\lib目录下面。

从这里开始配置的是在浏览器中点击add core创建的空的文件夹的配置
4.配置中文分词器:在D:\solr\solr_home\demo_core\conf目录下面找到managed-schema文件。配置managed-schema文件。在文件的末尾处加上中文分词器的配置。

<!-- ChineseAnalyzer -->
<fieldType name="solr_cnAnalyzer" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
  </analyzer>
</fieldType>

5.重新启动solr服务器,然后查看中文分词器是否引入

6.修改D:\solr\solr_home\demo_core\conf目录下的solrconfig.xml文件,为了以后便于维护此文件,我们就在requestHandler起始位置,约为720行处,添加如下内容:

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
	<lst name="defaults">
	<str name="config">data-config.xml</str>
	</lst>
</requestHandler>


7.在solrconfig.xml的同一级目录中创建data-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig> 
  <dataSource type="JdbcDataSource" 
              driver="com.mysql.jdbc.Driver" 
              url="jdbc:mysql://localhost:3306/solr" 
              user="root" 
              password="root"/> 
  <document> 
		<entity name="products"  query="select pid,pname,catalog_name,price,description,picture from products ">
				 <field column="pid" name="id"/>  
				 <field column="pname" name="prod_pname"/>  
				 <field column="catalog_name" name="prod_catalog_name"/>  
				 <field column="price" name="prod_price"/>  
				 <field column="description" name="prod_description"/>  
				 <field column="picture" name="prod_picture"/>  
		</entity> 
  </document> 
</dataConfig>

8.在managed-schema文件中配置域,这里的名字要与data-config中的域名一模一样

<field name="prod_pname" type="solr_cnAnalyzer" indexed="true" stored="true" required="true"  /> 
<field name="prod_catalog_name" type="string" indexed="true" stored="true" required="true"  /> 
<field name="prod_price" type="pdouble" indexed="true" stored="true" required="true"  /> 
<field name="prod_description" type="solr_cnAnalyzer" indexed="true" stored="true" required="true"  /> 
<field name="prod_picture" type="string" indexed="false" stored="true" required="true"  />

9.在数据库中执行下述的sql语句,创建solr表

链接:https://pan.baidu.com/s/1-ZisIahnWuhiKF4chsEWGQ 
提取码:8ynj


9.重新启动tomcat服务器。执行dataimport的操作

10.使用query命令查询导入的数据:

五、managed-schema文件详解

schema.xml,在SolrCore的conf目录下,它是Solr数据表配置文件,它定义了加入索引的数据的数据类型的。主要包括FieldTypes、Fields和其他的一些缺省设置。在solr中,Field和FieldType都需要先定义后使用



field

dynamicField和uniqueKey

CopyField的使用
应用场景:我们在搜索时比如输入java,一篇文章分为标题、简介、内容等很多字段,输入的关键字需要指定solr中的域进行检索,不可能从一个表中将所有字段进行索引,因为有些字段不需要索引,所以出现copyField域,把多个域的关键词复制到同一个域,多个域时,可以放到一个域中。就不用定义那么多域了。搜索比较方便

实例:<copyField source="projectName" dest="keywords"/>
Source:是Field域的名称
Dest:是destination的缩写 即目标域


fieldType

六、客户端查询操作

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值