目录
2020-01-17更新
前言
一、首先列出来搭建Solr服务器所需要的基本工具
二、开始搭建Solr服务器
三、导入数据库中的数据到Solr中
四、使用Solrj操作查询
五、总结
全文检索技术,笔者推出了另一篇文章,采用的是更强大的Elasticsearch,而且安装、配置都很方便,还利用Spring Boot整合到了实际项目中,提供整合源代码,如果确定要采用Solr请继续看下文,反之请看:
https://blog.csdn.net/wzy18210825916/article/details/103939728
之前做一个电商项目,为了提高搜索的准确性、广泛性以及用户体验,研究了一下Solr技术并添加到了自己的项目中。在网上看了好多博客的文章,根据前辈的经验得到了很多指点,但是也跳了不少坑。今天回顾老代码,决定做一下笔记,自己码一篇文章,希望能够帮到奋斗在一线的开发人员。想必各位看官既然能翻到这篇文章,一定是已经对Solr有所了解,所以这里不再阐述,直接上干货,搭建Solr环境并将创建的Solr工程部署到Tomcat中。
1、jdk1.8+,本人使用的是jdk10;
2、Tomcat安装包,本人使用的是tomcat8.0;
3、Solr安装包,本人使用的是Solr-7.4.0;
附:(1)、Solr-7.4.0安装包的百度网盘下载地址:https://pan.baidu.com/s/1dqe91eM-uqqZP5bjIlx5uQ
(2)、Solr-7.4.0安装包的官网下载地址:http://lucene.apache.org/solr/downloads.html
注:在进行接下来的工作之前,一定要确保你的jdk环境、Tomcat环境以及配置好并且可以正常运作。
1、首先将下载的solr-7.4.0.zip进行解压,随便一个文件夹都可以,最好是有意义、易于自己后期查找的文件夹,此处本人就解压到了当前文件夹。最好不要是解压到中文名的文件夹,后期95%会出错。
2、拷贝solr-7.4.0\server\solr-webapp中的webapp文件夹至你的tomcat安装目录下的webapps中,并重命名为solr。
3、将solr-7.4.0\server\lib\ext目录下的所有jar包,以及solr-7.4.0\server\lib目录下以metrics开头的jar、gmetric4j-1.0.7.jar复制到上一步所建好的solr文件夹中的WEB-INF下的lib文件夹中(Tomcat安装目录\webapps\solr\WEB-INF\lib)。
4、在solr-7.4.0目录下新建文件夹solr_home
5、拷贝solr-7.4.0\server\solr目录下的所有文件夹、文件到上一步创建的solr_home文件夹下。
6、拷贝solr-7.4.0目录下的contrib目录以及dist目录到第四步创建的solr_home文件夹下。
7、在第四步创建的solr_home目录下新建文件夹logs,用来存放运行日志。
8、将solr-7.4.0\server\resources目录下的三个文件,拷贝到上一步创建的logs文件夹下(solr-7.4.0\solr_home\logs)。
注:resources目录下本身是没有log4j.properties的,自行创建以后再复制粘贴过去。
9、修改Tomcat的catalina.bat脚本,添加以下代码,其中-Dsolr.log.dir关联的是你创建的solr_home下的logs文件夹,路径一定要写正确。
10、在solr_home目录下新建文件夹new_core,代表一个solr工程,solr_home下可以有多个solr工程。
11、将solr-7.4.0\server\solr\configsets\_default目录下的conf文件夹,复制到上一步创建的new_core文件夹下。
12、完成上一步之后,修改solr-7.4.0\solr_home\new_core\conf目录下的solrconfig.xml文件,贴上修改内容:
13、修改Tomcat安装目录\webapps\solr\WEB-INF目录下的web.xml
(1)新增以下内容,此部分默认是注释掉的,解开,然后我们只需要改动的是
(2)将以下内容注释掉。
14、启动Tomcat,在浏览器访问http://localhost:8080/solr/index.html,根据自己的端口号访问即可,如果服务环境搭建成功,会出来以下页面。
15、在solr-7.4.0\solr_home\new_core目录下新建data文件夹,与conf文件夹同级。
16、点击Core Admin菜单选项,因为我们还没有在Solr服务器添加Core,所以会弹出以下窗口,此时我们将刚才创建的new_core工程关联进来。
17、点击Add Core,如果上面的instanceDir、dataDir等配置写正确的话,会出现以下页面,那么恭喜你,成功添加了一个Solr工程,并且将它部署到了Tomcat中。
至此,我们的Solr服务器环境已经搭建好了,并且在服务器中添加了一个core工程,在确保你的进度到了这一步之后,我们继续进行接下来的工作——直接导入数据库中的数据到Solr服务器中。
1、在solr-7.4.0\solr_home\new_core\conf目录下创建一个文件data-config.xml,与solrconfig.xml同级。
2、修改solr-7.4.0\solr_home\new_core\conf目录下的solrconfig.xml文件,即与上一步data-config.xml同级的那个.xml文件,在
data-config.xml
其中
3、接下来我们打开data-config.xml文件,配置相关的数据库属性,即我们要导入那张表的哪些字段,内容如下:
上面这段代码中,url是你要访问的数据库路径,我这里指定到我的MyEasyBuy数据库。user是用户名,password是你的数据库密码。query是一个sql语句,你需要导入哪张表的哪些字段,查就行了,我这里只从三级分类表中查了一个商品分类名称。然后
4、接下来,依然是这一级目录,我们打开managed-schema文件,将刚才在data-config.xml中配置的
这里
5、因为现在涉及到数据库了,肯定需要依赖一些jar包,我们需要导三个jar包到Tomcat安装目录\webapps\solr\WEB-INF\lib目录下,分别是mysql-connector-java-8.0.11.jar,以及solr-7.4.0\dist目录下的solr-dataimporthandler-7.4.0.jar、solr-dataimporthandler-extras-7.4.0.jar。
6、重启Tomcat,再次访问我们刚才的页面,在左侧找到我们部署好的new_core工程,点击Dataimport,再选择full-import(全部导入),点击Execute,出现下面的页面,证明这张表的数据已经导入进来了。
7、现在,我们来试着搜索一下,我们搜索有关电视的商品分类吧,其中ProName就是我们刚才的
1、首先列出来solrj所需要的所有依赖包,当时是真难找,满世界找包,这里分享一下,全部的jar包下载地址:
https://pan.baidu.com/s/1Pao3R_2tvburJdfFfh2bwA
2、将解压出来的所有jar包,复制粘贴到你的Web项目中的lib文件夹下,不解释。
3、撸一篇代码,如下
package test;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
public class Test {
public static void queryContent(){
//1.创建连接,路径最后一定不要忘记加上我们的new_core,它会默认访问index.html
SolrServer solrServer = new HttpSolrServer("http://localhost:8088/solr/new_core");
//2.创建查询语句
SolrQuery query = new SolrQuery();
//3.设置查询条件
query.setQuery("ProName:*电视*");
//4、执行查询
QueryResponse queryResponse = null;
try {
//使用SolrServer对象的query()方法,传入一个SolrQuery类型的参数,执行语句,返回QueryResponse对象
queryResponse = solrServer.query(query);
} catch (SolrServerException e) {
e.printStackTrace();
}
//5.获取文档列表 使用QueryResponse对象的getResults()方法获取结果集
SolrDocumentList documentList = queryResponse.getResults();
//6、遍历集合,打印查询到的数据
for (SolrDocument solrDocument : documentList) {
//取各个文档信息
System.out.print(solrDocument.get("ProName"));
System.out.println();
}
}
public static void main(String[] args) {
queryContent();
}
}
4、因为在IDEA中,你要运行一个页面,本机上的服务不能开启,否则它会说端口号被占用,这样就无法运行调试我们的项目,所以我们随便启动一个jsp页面,IDEA会为我们启动Tomcat服务器。需要注意的是,因为我们在tomcat中的webapps下创建的solr文件夹,是跟你部署到webapps下的项目是同级目录的,而Web应用无法访问到它自身以外的文件夹,所以在IDEA中部署tomcat时,将下面这个选项勾上,它就可以对外部文件夹进行访问,才会有权限。
5、然后找到我们的Test.java代码,右键运行,控制台打印出来以下内容,大功告成!
1、关于Solr服务器的搭建,以及导入数据、简单的查询,本文已经介绍完了。目前依然在研究这个东西,在以后的文章中会陆续更新关于Solr的技术点,也希望各位能够多多指点,共同进步。
2、Solr服务器搭建过程的难点、繁琐点:各个目录下的jar包的移动,以及各个目录下的各种xml文件的配置,最主要的是各层级目录要关联正确,大家多练习几次,相信都可以熟练地进行搭建部署!