window下tomcat8.5.50+solr8.2.0+mySql整合部署

Posted 挑水砍柴皆能悟道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了window下tomcat8.5.50+solr8.2.0+mySql整合部署相关的知识,希望对你有一定的参考价值。

最近项目上solr版本进行了升级,然后应用启动失败,拿掉定时更新的监听任务

<listener> <listener-class> org.apache.solr.handler.dataimport.scheduler.ApplicationListener </listener-class></listener>

后可以正常启动使用,所以排查了一下原因,是因为高版本的solr对solr-dataimport-scheduler.jar包的兼容问题,在网上找了相关问题的资料,修改了该 dataimport-scheduler.jar包监听事件的方法后可以正常使用。再此重新整理记录一下tomcat+solr+mysql的部署,中文分词,定时(增量,全量,删除)更新问题。

首先,要想在电脑上运行tomcat要有Java的运行环境,所以要先安装jdk配置环境变量,在此不再对该安装做说明。
一、tomcat+solr+MySQL的部署准备材料
apache-tomcat-8.5.50.zip官网下载解压即可;
solr-8.2.0.zip官网下载解压即可;
mysql-installer-community-5.7.12.0.msi官网下载安装即可;

二、tomcat+solr整合启动
我在D盘新建了一个tomcatSolr文件夹,所有东西都放在该文件夹下。
①在tomcatSolrapache-tomcat-8.5.50的webapps目录下新建一个文件solr夹,结果如下图;
②将solr-8.2.0serversolr-webappwebapp目录下的所有文件拷贝到上一步新建的solr下,结果如下图;
window下tomcat8.5.50+solr8.2.0+mySql整合部署
③将solr-8.2.0serverlibext目录下的所有jar包拷贝到tomcatSolrapache-tomcat-8.5.50webappssolrWEB-INFlib目录下;
④将solr-8.2.0serverlib目录下metrics-*.jar拷贝到tomcatSolrapache-tomcat-8.5.50webappssolrWEB-INFlib目录下;
window下tomcat8.5.50+solr8.2.0+mySql整合部署
⑤将solr-8.2.0server esources目录下所有文件拷贝到tomcatSolrapache-tomcat-8.5.50webappssolrWEB-INFclasses目录下,classes文件夹没有需要自己新建一个,结果如下图;
window下tomcat8.5.50+solr8.2.0+mySql整合部署
⑥将solr-8.2.0server下的solr文件整体夹拷贝到文件夹tomcatSolr下,更名为 solrhome ,该文件夹可以放到任意位置,且文件夹名称任意,但下面配置文件用到时要注意路径;在该文件夹下新建 conf logs my_db 文件夹,下面要用到再详细说明,最后结果如图;
window下tomcat8.5.50+solr8.2.0+mySql整合部署
⑦修改tomcatSolrapache-tomcat-8.5.50webappssolrWEB-INF目录下的web.xml文件,在第一个filter上面增加如下代码:
  
    
    
  
<env-entry>      <env-entry-name>solr/home</env-entry-name>      <env-entry-value>D: omcatSolrsolrhome</env-entry-value>      <env-entry-type>java.lang.String</env-entry-type>   </env-entry>
< env-entry-value >地址为solrhome文件夹位置和名称,注释掉安全验证码,如果不注释会报403错误或者用户名密码验证,注释内容如下图:
window下tomcat8.5.50+solr8.2.0+mySql整合部署
⑧将tomcatSolrapache-tomcat-8.5.50webappssolrWEB-INFclasses目录下的log4j2文件的 ${sys:solr.log.dir}替换为指定的真实路径,我把日志文件放在了上面新建的 logs目录下:
window下tomcat8.5.50+solr8.2.0+mySql整合部署
到此步骤就可以双击tomcatSolrapache-tomcat-8.5.50in目录下startup.bat启动solr了,后台打印出“solr”图形证明启动成功如下图:
window下tomcat8.5.50+solr8.2.0+mySql整合部署
然后打开浏览器输入http://localhost:8088/solr/index.html该地址就可以看到solr主页面,8088为我自己的tomcat端口,默认为8080;
window下tomcat8.5.50+solr8.2.0+mySql整合部署

solrhome 是solr的核心目录,主要的配置文件,索引以及基本数据的保存,插件和数据库的集成都是在此目录下进行配置 下面来建立一个自己的core关于core的创建有两种方式,一种是通过页面先创建,然后在导入所需文件才能成功创建,再点击创建才能够成功;第二种是手动创建core 核心目录以及所需文件然后在页面点击创建,我用采用第二种方式创建core。在tomcatSolrsolrhome目录下新建 my_db 文件夹作为一个core(在上面已经创建完成);
⑨将solr-8.2.0serversolrconfigsetssample_techproducts_configs目录下的conf文件夹拷贝到tomcatSolrsolrhomemy_db目录下,然后在tomcatSolrsolrhomemy_db文件夹下新建 lib文件夹 ,将solr-8.2.0dist目录下的solr-dataimporthandler-8.2.0.jar和solr-dataimporthandler-extras-8.2.0.jar两个jar包拷贝到新建的 lib文件夹 下,然后进入网页添加core,core创建成功;
window下tomcat8.5.50+solr8.2.0+mySql整合部署
window下tomcat8.5.50+solr8.2.0+mySql整合部署

三、solr+MySQL数据库整合
①数据库配置,将mysql-connector-java-8.0.11.jar数据库驱动包放入 lib文件夹下,此时lib文件夹里共有三个jar包;
window下tomcat8.5.50+solr8.2.0+mySql整合部署
②打开tomcatSolrsolrhomemy_dbconf文件夹,
a.找到里面的solr-data-config.xml文件打开,清空里面内容,然后添加数据库配置:
<?xml version="1.0" encoding="UTF-8" ?><dataConfig> <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/shl_a?useUnicode=true&amp;characterEncoding=utf8&amp;userSSL=false&amp;serverTimezone=GMT%2B8" user="root" password="pwd123"/> <document> <!-- ?serverTimezone=UTC --> <entity name="product" pk="id" query="select c_id,c_name,c_description,c_last_update_time from tables_demo" deltaImportQuery="select c_id,c_name,c_description,c_last_update_time from tables_demo where c_id = '${dih.delta.id}'" deltaQuery="select c_id as id,c_name,c_description,c_last_update_time from tables_demo where c_last_update_time >'${dataimporter.last_index_time}'"> <field column="c_id" name="id"/> <field column="c_name" name="s_name"/> <field column="c_description" name="s_description"/> <field column="c_last_update_time" name="s_updateTime"/> </entity> </document></dataConfig>

b.找到里面的solrconfig.xml文件打开,添加数据库驱动包的配置;添加 数据库包的引用
<lib dir="${solr.install.dir:../../../..}/dist/" regex="mysql-connector-java-.*.jar" />
找到
<requestHandler name="/dataimport" class="solr.DataImportHandler">  <lst name="defaults">  <str name="config">solr-data-config.xml</str>  </lst> </requestHandler>
 如果里面的config不是solr-data-config.xml改为solr-data-config.xml;
c.找到managed-schema文件打开,在最后面添加添加自定义的字段,
<field name="s_name" type="text_general" indexed="true" stored="true" multiValued="true" /><field name="s_description" type="text_ik" indexed="true" stored="true" multiValued="true" /><field name="s_updateTime" type="pdate" indexed="true" stored="true" />

solr-data-config.xml文件中entity下field的column值为查询结果的列的名称,name为managed-schema文件中field的name;

进入页面选择my_db这个core选择Dataimport选择实体product人后点击Excute导入数据,手动刷新状态,导入成功会有结果信息;
window下tomcat8.5.50+solr8.2.0+mySql整合部署
到此就可以查询了,点击Query,然后点击Excute Query可查询出默认的十条结果;
window下tomcat8.5.50+solr8.2.0+mySql整合部署
但是solr自带的包中没有中文的分词,例如搜索“我是中国人”选择已给分词只能分为“我是中国人”一个整体语句或者“我”“是”“中”“国”“人”单个字,但这显然不是想要,所以要自己添加一个中文分词器的包,分词结果为“我是中国人”“我是”“中国人”“中国”“国人”等词组;

④下载ik-analyzer-8.3.0.jar中文分词器的jar包放到tomcatSolrapache-tomcat-8.5.50webappssolrWEB-INFlib路径下;在tomcatSolrsolrhomemy_dbconf目录下找到managed-schema文件添加中文分词支持的如下代码:
<fieldType name="text_ik" class="solr.TextField"> <analyzer type="index"> <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> <analyzer type="query"> <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer></fieldType>
⑤最后就自动更新索引文件了,可以全量更新、增量更新、删除更新;
打开tomcatSolrapache-tomcat-8.5.50webappssolrWEB-INF目录下web.xml文件,在第一个servlet上边添加定时更新的监听器:
<listener> <listener-class> org.apache.solr.handler.dataimport.scheduler.ApplicationListener </listener-class></listener>
在tomcatSolrapache-tomcat-8.5.50webappssolrWEB-INFlib路径下放入solr-dataimport-scheduler.jar包(最新的包)公众号回复“监听包”获取网盘提取地址;
在tomcatSolrsolrhomeconf目录下新建dataimport.properties定时更新的配置文件,
################################################## ## dataimport scheduler properties ## ################################################## # to sync or not to sync# 1 - active; anything else - inactive# 这里的配置不用修改syncEnabled=1 # which cores to schedule# in a multi-core environment you can decide which cores you want syncronized# leave empty or comment it out if using single-core deployment# 修改成你所使用的core,我这里是我自定义的core:simplesyncCores=simple # solr server name or IP address# [defaults to localhost if empty]# 这个一般都是localhost不会变server=localhost # solr server port# [defaults to 80 if empty]# 安装solr的tomcat端口,如果你使用的是默认的端口,就不用改了,否则改成自己的端口就好了port=8080 # application name/context# [defaults to current ServletContextListener's context (app) name]# 这里默认不改webapp=solr # URL params [mandatory]# remainder of URL# 这里改成下面的形式,solr同步数据时请求的链接params=/dataimport?command=delta-import&clean=false&commit=true # schedule interval# number of minutes between two runs# [defaults to 30 if empty]#这里是设置定时任务的,单位是分钟,也就是多长时间你检测一次数据同步,根据项目需求修改# 开始测试的时候为了方便看到效果,时间可以设置短一点interval=1 # 重做索引的时间间隔,单位分钟,默认7200,即5天; # 为空,为0,或者注释掉:表示永不重做索引reBuildIndexInterval=7200 # 重做索引的参数reBuildIndexParams=/select?qt=/dataimport&command=full-import&clean=true&commit=true # 重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000;# 两种格式:2012-04-11 03:10:00 或者 03:10:00,后一种会自动补全日期部分为服务启动时的日期reBuildIndexBeginTime=03:10:00
打开tomcatSolrsolrhomemy_dbconf目录下solr-data-config.xml
<entity name="product" pk="id" query="select c_id,c_name,c_description,c_last_update_time from tables_demo" deltaImportQuery="select c_id,c_name,c_description,c_last_update_time from tables_demo where c_id = '${dih.delta.id}'" deltaQuery="select c_id as id,c_name,c_description,c_last_update_time from tables_demo where c_last_update_time >'${dataimporter.last_index_time}'"> <field column="c_id" name="id"/> <field column="c_name" name="s_name"/> <field column="c_description" name="s_description"/> <field column="c_last_update_time" name="s_updateTime"/> </entity>
pk = "id"  entity的主键,可选,但是增量导入时必须有,“ id”为managed-schema文件中 <uniqueKey> id </uniqueKey> 的值
query”为全量更新时的查询SQL;
deltaImportQuery”增量索引查询导入数据;
deltaQ uery”为只对增量起作用,而且只能返回id值,业务主键别名必须 as id
deletedPkQuery”增量索引删除主键ID查询,业务没有要求则文件里不需配置;
数据库表中添加c_last_update_time字段类型为timestamp默认为CURRENT_TIMESTAMP,数据更新后时间戳也会更新;

查询语句中条件 c_last_update_time>'${dataimporter.last_index_time}'查询出最后更新时间在上次更新后更新过的数据, ${dataimporter.last_index_time}为solr更新索引时的时间戳;

至此,window下tomcat8.5.50+solr8.2.0+MySQL整合部署已经完成了,大功告成。

以上是关于window下tomcat8.5.50+solr8.2.0+mySql整合部署的主要内容,如果未能解决你的问题,请参考以下文章

solr8.0 从数据库导入数据

solr8.2 环境搭建 配置中文分词器 ik-analyzer-solr8 详细步骤

solr8.0 ik中文分词器的简单配置

solr8.0的简单搭建

linux系统安装配置solr8

Solr8.0.0搜索查询问题