一、首先列出来搭建Solr服务器所需要的基本工具
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环境以及配置好并且可以正常运作。
二、开始搭建Solr服务器
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)新增以下内容,此部分默认是注释掉的,解开,然后我们只需要改动的是<env-entry-value>
中的值,这个值对应的是 你创建的solr_home文件夹的路径,在我这篇示例中即为D:/MySolr/solr-7.4.0/solr_home。
(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服务器中。
三、导入数据库中的数据到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文件,在<requestHandler name="/select" class="solr.SearchHandler">
上面增加以下这段代码:
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
其中<str name="config"></str>
里的内容就是我们在上一步创建的data-config.xml文件,将它们关联起来。
3、接下来我们打开data-config.xml文件,配置相关的数据库属性,即我们要导入那张表的哪些字段,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource name="source1" type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/MyEasyBuy?useSSL=true&serverTimezone=UTC"
user="root"
password="******" />
<document>
<entity name="cc_bill" dataSource="source1" pk="bill_id"
query="SELECT TypeName FROM ProductTypeThird">
<field column='TypeName' name='ProName' />
</entity>
</document>
</dataConfig>
上面这段代码中,url是你要访问的数据库路径,我这里指定到我的MyEasyBuy数据库。user是用户名,password是你的数据库密码。query是一个sql语句,你需要导入哪张表的哪些字段,查就行了,我这里只从三级分类表中查了一个商品分类名称。然后<field>
标签中的column属性是你SQL语句中查询的字段,跟数据库中对应;name属性是你给它起的一个别名,应该是必须指定的(本人没试过不指定的结果),至于name属性是干嘛的,继续往下操作,自然会明白。有多个查询字段就需要有多个<field>
标签,每一个<field>
标签对应一个字段。
4、接下来,依然是这一级目录,我们打开managed-schema文件,将刚才在data-config.xml中配置的<field>
标签添加进来
这里<field>
里的name属性值,就是我们刚才在data-config.xml中<field>
标签的name属性值,这是name属性的第一个用途,关联起来。type类型是你的数据类型,要看你从数据库中查的字段是什么类型,我这里是string字符串。
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就是我们刚才的<field>
标签的name属性值,可以看到,我们已经可以搜索出相关的词汇了。至于怎么样让它分词模糊搜索,在以后的博文中更新。
四、使用Solrj操作查询
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文件的配置,最主要的是各层级目录要关联正确,大家多练习几次,相信都可以熟练地进行搭建部署!