Solr 7.4.0与Tomcat 9.0.11整合

同一台机器部署多个Tomcat、Solr与Tomcat整合的部分配置


写在前面

由于本人的机子上已经安装过Tomcat 9.0.10,为了不影响已有的Tomcat服务器,所以决定再安装一个Tomcat用于部署Solr,所用的Tomcat服务器和Solr索引库目前都是最新版的,也就是Tomcat 9.0.11和Solr 7.4.0。


环境准备

Tomcat服务器:Tomcat 9.0.11
Solr索引库:Solr 7.4.0

Tomcat和Solr可自行到相应的官网上下载,版本根据自己的需要选择,下载完成后解压如下:

envirenment


配置多个Tomcat

配置环境变量

Location:我的电脑 >> 计算机 >> 属性 >> 高级系统设置 >> 环境变量 >> 系统变量

1
2
3
4
CATALINA_HOME
CATALINA_BASE
TOMCAT_HOME
Path

由于我已经配置了一个Tomcat,所以在下面的配置中,所有涉及的环境变量我都会配置为Xxx3的形式,即:

1
2
3
CATALINA_HOME3
CATALINA_BASE3
TOMCAT_HOME3

location

配置CATALINA_HOME3,默认情况下是CATALINA_HOME

CATALINA_HOME3

配置Path,新增%CATALINA_HOME3%\bin

CATALINA_BASE3

配置CATALINA_BASE3,默认情况下是CATALINA_BASE3

CATALINA_BASE3

配置TOMCAT_HOME3,默认情况下是TOMCAT_HOME

TOMCAT_HOME3

修改脚本文件,文件所在路径:F:\Solr And Tomcat\apache-tomcat-9.0.11\bin
1
2
3
4
5
6
7
8
9
10
11
12
13
1、修改catalina.bat文件

环境变量配置好之后,需要修改`F:\Solr And Tomcat\apache-tomcat-9.0.11\bin`目录下的
`catalina.bat`文件,使用`Notepad++`或者其他的文本编辑器将所有的`CATALINA_HOME`
替换为`CATALINA_HOME3`;所有的`CATALINA_BASE`替换为`CATALINA_BASE3`,保存退出。

2、修改startup.bat文件

与修改catalina.bat文件类似,将所有的`CATALINA_HOME`替换为`CATALINA_HOME3`,保存退出

3、修改shutdown.bat文件

将所有的`CATALINA_HOME`替换为`CATALINA_HOME3`,保存退出

修改server.xml

修改Tomcat的核心配置文件,主要是修改默认的访问端口、JVM启动端口以及shutdown端口

1
2
3
4
5
6
7
8
9
10
- <Server port="8005" shutdown="SHUTDOWN">
+ <Server port="8007" shutdown="SHUTDOWN">

- <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
+ <Connector port="8083" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
+ <Connector port="8011" protocol="AJP/1.3" redirectPort="8443" />

注意:-表示修改原始的配置、+表示修改后的配置,修改后的端口号可以自定义,但是不能与其他端口号冲突

测试

tomcat
binggo


整合Solr

Solr的目录结构

solr

导入demo

F:\Solr And Tomcat\solr-7.4.0\server\solr-webapp下的webapp文件夹复制到F:\Solr And Tomcat\apache-tomcat-9.0.11\webapps目录下,重命名为solr(名字可自定义)

导入jar包

复制F:\Solr And Tomcat\solr-7.4.0\server\lib\ext下的所有jar包到F:\Solr And Tomcat\apache-tomcat-9.0.11\webapps\solr\WEB-INF\lib下,如果jar包重复可选择跳过或者覆盖;复制F:\Solr And Tomcat\solr-7.4.0\server\lib下所有metrics开头的jar包以及gmetric4j-1.0.7.jarF:\Solr And Tomcat\apache-tomcat-9.0.11\webapps\solr\WEB-INF\lib下。

创建solrhome

创建solrhome文件夹,位置自定义,复制F:\Solr And Tomcat\solr-7.4.0\server\solr下的所有文件到新建的solrhome文件夹中

solrhome

修改F:\Solr And Tomcat\apache-tomcat-9.0.11\webapps\solr\WEB-INF路径下的web.xml文件

默认的配置
1
2
3
4
5
6
7
<!--
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/put/your/solr/home/here</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
-->
修改后:
1
2
3
4
5
6
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<!-- 此处填写solrhome所在的路径 -->
<env-entry-value>F:\Solr And Tomcat\solrhome</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
注释掉安全约束的配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!--
<security-constraint>
<web-resource-collection>
<web-resource-name>Disable TRACE</web-resource-name>
<url-pattern>/</url-pattern>
<http-method>TRACE</http-method>
</web-resource-collection>
<auth-constraint/>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>Enable everything but TRACE</web-resource-name>
<url-pattern>/</url-pattern>
<http-method-omission>TRACE</http-method-omission>
</web-resource-collection>
</security-constraint>
-->

修改solrconfig.xml

复制F:\Solr And Tomcat\solr-7.4.0目录下的dist文件夹和contrib文件夹到F:\Solr And Tomcat\solrhome目录下,这样做的主要因为Solr加载第三方插件的路径配置是这样的:

solrconfig.xml
1
2
3
4
5
6
7
8
9
10
11
<lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" />

<lib dir="${solr.install.dir:../../../..}/contrib/clustering/lib/" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-clustering-\d.*\.jar" />

<lib dir="${solr.install.dir:../../../..}/contrib/langid/lib/" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-langid-\d.*\.jar" />

<lib dir="${solr.install.dir:../../../..}/contrib/velocity/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-velocity-\d.*\.jar" />

这个配置文件默认是在F:\Solr And Tomcat\solr-7.4.0\server\solr\configsets\_default\conf目录下,由于在配置solrhome的时候我们将原来的配置文件拷贝到了solrhome文件夹中,所以要修改原来的路径配置,如果distcontrib与新建的core(collection)位于同一目录下,用一个..即可。


测试整合

运行startup.bat脚本启动Tomcat,访问:http://localhost:8083/solr/index.html

solr and tomcat


导入数据

引入jar包以及资源文件

由于用到了IKAnalyzer分词器,所以需要导入相应的jar包(ikanalyzer-2012_u6.jar),包下载地址:http://mvnrepository.com/artifact/com.janeluo/ikanalyzer/2012_u6,将ikanalyzer-2012_u6.jar分别复制到~\solrhome\contrib\extraction\lib~\apache-tomcat-9.0.11\webapps\solr\WEB-INF\lib目录下。并且将以下三个jar包复制到~\solrhome\collection2\lib目录下。

1
2
3
4
5
// 数据库驱动包
mysql-connector-java-8.0.11.jar
// Solr自带的数据导入相关的jar包,默认位于~\solr-7.4.0\dist目录下
solr-dataimporthandler-7.4.0.jar
solr-dataimporthandler-extras-7.4.0.jar
注意:
IKAnalyzer分词器的作者在几年前就已经停止维护这个项目了,这就意味如果你使用的是新版本Solr可能会存在兼容性问题,问题我在文章末尾已经提到。当然,如果你对IKAnalyzer分词器这个项目感兴趣,你可以尝试着去改进它,或者使用别人已经改进过的版本。

导入jar包后还需要将IKAnalyzer分词器相关的资源文件拷贝到~\apache-tomcat-9.0.11\webapps\solr\WEB-INF\classes目录下,如果没有classes目录则需要自己手动创建一个。

相关的资源文件
1
2
3
ext.dic
IKAnalyzer.cfg.xml
stopword.dic

修改solrconfig.xml文件

在solrconfig.xml添加以下配置,db-data-config.xml文件名可自定义,但必须与solrconfig.xml位于同级目录下

solrconfig.xml
1
2
3
4
5
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">db-data-config.xml</str>
</lst>
</requestHandler>

修改managed-schema文件

修改managed-schema文件,添加如下配置

managed-schema
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!-- IkAnalyzer -->
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer" />
</fieldType>
<!-- IkAnalyzer field -->
<filed name="title_ik" type="text_ik" indexed="true" stored="true" />
<filed name="content_ik" type="text_ik" indexed="true" stored="false" multiValue="true" />

<!-- 添加与数据库表字段对应的field -->
<field name="item_title" type="string" indexed="true" stored="true" />
<field name="item_price" type="pfloat" indexed="true" stored="true" />
<field name="item_num" type="string" indexed="true" stored="true" />
<field name="item_image" type="string" indexed="true" stored="true" />

<!-- 配置copyField,优化搜索 -->
<field name="item_keyworks" type="text_ik" indexed="ture" stored="false" multiValued="ture" />
<copyField source="item_title" dest="item_keyworks" />
<copyField source="item_price" dest="item_keyworks" />

修改db-data-config.xml文件

修改db-data-config.xml文件,添加如下配置

db-data-config.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<dataConfig>
<!-- 配置数据库的连接信息 -->
<dataSource name="dataSource" type="JdbcDataSource"
driver="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/lucene?useSSL=false&amp;serverTimezone=GMT%2B8"
user="mackvord"
password="12345678"/>
<document>
<entity name="item" dataSource="dataSource" query="SELECT id,title,price,num,image FROM tb_item">
<!-- column表示数据库表字段名,name属性的值对应于managed-schema中的field -->
<field column="id" name="id" />
<field column="title" name="item_title" />
<field column="price" name="item_price" />
<field column="num" name="item_num" />
<field column="image" name="item_image" />
</entity>
</document>
</dataConfig>

测试

dataimport

通过观察发现,数据并没有导入成功,无法成功创建索引,一直显示:Requests: 1 , Fetched: 3,096 774/s, Skipped: 0 , Processed: 0,自己也在网上查找了很久,尝试了很多方法但都没能解决这个问题,查看日志,也没发现有异常信息,自己也一度认为是因为最新版本的原因,导致数据始终无法成功导入,过了一天,再次尝试导入数据的时候,控制台居然报了个错:solr Exception in thread "Thread-7" java.lang.AbstractMethodErrorasphyxia咋一看应该是分词器的问题,初步猜测应该是IKAnalyzer分词器的版本问题,因为IKAnalyzer已经相当长时间都没有更新的,随后在网上找到了一个据说是能够兼容6.x版本的Lucene的IKAnalyzer分词器,Github 地址,自己download下来,导入了lucene-core-7.4.0.jarlucene-queryparser-7.4.0.jar两个jar包后重新打成Jar包,替换掉原来的ikanalyzer-2012_u6.jar,之后重新启动Tomcat,导入数据成功。

效果:

dataimport

查询数据:

dataimport


如果您觉得我的文章对您有帮助,请随意赞赏,您的支持将鼓励我继续创作!
0%