基于Solr7.4版本搭建Solr服务器及使用案例

最近在做一个电商项目,为了提高搜索的准确性、广泛性以及用户体验,研究了一下Solr技术并添加到了自己的项目中。在网上看了好多博客的文章,根据前辈的经验得到了很多指点,但是也跳了不少坑。今天自己码一篇文章,希望能够帮到奋斗在一线的开发人员。想必各位看官既然能翻到这篇文章,一定是已经对Solr有所了解,所以这里不再阐述,直接上干货,搭建Solr环境并将创建的Solr工程部署到Tomcat中。

一、首先列出来搭建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文件的配置,最主要的是各层级目录要关联正确,大家多练习几次,相信都可以熟练地进行搭建部署!

猜你喜欢

转载自blog.csdn.net/wzy18210825916/article/details/80946454