一、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