在Linux环境下,将Solr部署到tomcat7中,导入Mysql数据库数据, 定时更新索引

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

什么是solr

solr是基于Lucene的全文搜索服务器,对Lucene进行了扩展优化。

准备工作

首先,去下载以下软件包:

JDK8:jdk-8u60-linux-x64.tar.gz

TOMCAT8:apache-tomcat-8.5.4.zip

SOLR5.5.3:solr-5.5.3.zip

并上传到到linux服务器某个路径下,如下图,我放置在/usr/local/solr目录下:

安装solr:解压solr-5.5.3.zip即可;

安装tomcat、jdk:略,网上资料很多,基本上解压,设置个环境变量就可以;

然后,安装mysql:略,我安装的是Mysql 5.5;

创建数据库及表结构:我创建了一个数据库solrdemo,以及user表,如下图,

updatetime:最后更新时间;

valid:是否有效,0表示已删除的数据,不需要建立索引。

创建一个solr core

至于什么叫做core,我觉得就是一个管理数据的东西,里面有一些配置文件,索引的东西。具体创建步骤如下:

进入solr的bin目录,输入以下命令,启动solr:

./solr start

可看到如下日志:

[root@localhost bin]# ./solr start
Waiting up to 30 seconds to see Solr running on port 8983 [-]  
Started Solr server on port 8983 (pid=9951). Happy searching!

然后输入./solr create -c demo命令,创建一个core叫demo;

./solr create -c demo

可看到如下日志:

复制代码
Copying configuration to new core instance directory:
/usr/local/solr/solr-5.5.3/server/solr/demo

Creating new core 'demo' using command:
http://localhost:8983/solr/admin/cores?action=CREATE&name=demo&instanceDir=demo

{
  "responseHeader":{
    "status":0,
    "QTime":7258},
  "core":"demo"}
复制代码

创建完毕;

关闭solr服务:

输入命令./solr stop -all

./solr stop -all

可看到如下日志:

Sending stop command to Solr running on port 8983 ... waiting 5 seconds to allow Jetty process 9951 to stop gracefully.

在/usr/local/solr/solr-5.5.3/server/solr目录下可以看到我们创建的demo core

部署到tomcat

在tomcat的webapp目录下新建一个文件夹,叫solr;

拷贝/usr/local/solr/solr-5.5.3/server/solr-webapp/webapp目录下的内容到/usr/local/solr/apache-tomcat-8.5.4/webapps/solr目录下;

然后在/usr/local/solr/apache-tomcat-8.5.4/webapps/solr目录下新建一个solrhome文件夹,拷贝/usr/local/solr/solr-5.5.3/server/solr(里面有一个我们刚刚创建好的core,“demo”)目录下的内容到/usr/local/solr/apache-tomcat-8.5.4/webapps/solr/solrhome目录下。

拷贝/usr/local/solr/solr-5.5.3/server/lib/ext目录下的jar包到/usr/local/solr/apache-tomcat-8.5.4/webapps/solr/WEB-INF/lib下;

拷贝/usr/local/solr/solr-5.5.3/dist目录下的solr-dataimporthandler-5.5.3.jar和solr-dataimporthandler-extras-5.5.3.jar到/usr/local/solr/apache-tomcat-8.5.4/webapps/solr/WEB-INF/lib下;

拷贝/usr/local/solr/solr-5.5.3/server/resources目录下的log4j.properties文件到/usr/local/solr/apache-tomcat-8.5.4/webapps/solr/WEB-INF/classes目录,没有classes文件夹的自己创建一个。

修改/usr/local/solr/apache-tomcat-8.5.4/webapps/solr/WEB-INF/web.xml文件内容,添加solr/home的配置信息:

    <env-entry>
       <env-entry-name>solr/home</env-entry-name>
       <env-entry-value>/usr/local/solr/apache-tomcat-8.5.4/webapps/solr/solrhome</env-entry-value>
       <env-entry-type>java.lang.String</env-entry-type>
    </env-entry>

修改/usr/local/solr/apache-tomcat-8.5.4/webapps/solr/solrhome/demo/conf/solrconfig.xml文件,将75-85行修改为如下内容,因为我们是拷贝过来的,路径变了,我这里直接用绝对路径。

复制代码
  <lib dir="/usr/local/solr/solr-5.5.3/contrib/extraction/lib" regex=".*\.jar" />
  <lib dir="/usr/local/solr/solr-5.5.3/dist/" regex="solr-cell-\d.*\.jar" />

  <lib dir="/usr/local/solr/solr-5.5.3/contrib/clustering/lib/" regex=".*\.jar" />
  <lib dir="/usr/local/solr/solr-5.5.3/dist/" regex="solr-clustering-\d.*\.jar" />

  <lib dir="/usr/local/solr/solr-5.5.3/contrib/langid/lib/" regex=".*\.jar" />
  <lib dir="/usr/local/solr/solr-5.5.3/dist/" regex="solr-langid-\d.*\.jar" />

  <lib dir="/usr/local/solr/solr-5.5.3/contrib/velocity/lib" regex=".*\.jar" />
  <lib dir="/usr/local/solr/solr-5.5.3/dist/" regex="solr-velocity-\d.*\.jar" />
复制代码

最后,启动tomcat,记得开放8080端口,可以修改/etc/sysconfig/iptables,添加-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT,然后输入service iptables restart重启iptables服务。

接着,浏览器输入http://192.168.229.100:8080/solr/index.html,可以看到我们创建的core demo,如下图:

导入mysql数据库数据,并创建索引

1、下载mysql连接驱动,如mysql-connector-java-5.1.22-bin.jar,拷贝到/usr/local/solr/apache-tomcat-8.5.4/webapps/solr/WEB-INF/lib目录;

2、在/usr/local/solr/apache-tomcat-8.5.4/webapps/solr/solrhome/demo/conf目录下新建一个文件data_config.xml,内容如下:

复制代码
<dataConfig>
<dataSource name="solrdemo" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.229.1:3306/solrdemo" user="root" password="root"/>
  <document>
    <entity dataSource="solrdemo"  
            name="user" 
            query="select id, name, address from user where valid=1 " 
            deltaImportQuery="select  id,name,address  from user where ID='${dataimporter.delta.id}'"  
            deltaQuery="select id  from user where updatetime > '${dataimporter.last_index_time}'"  
            deletedPkQuery="select id  from user where valid=0">
            
        <field  column="id"  name="id"/>
        <field  column="name"  name="name"/>
        <field  column="address"  name="address"/>
     </entity>
  </document>
</dataConfig>
复制代码

修改/usr/local/solr/apache-tomcat-8.5.4/webapps/solr/solrhome/demo/conf目录下的managed-schema文件,添加如下两行,id已经有了,不用添加:

    <field name="address" type="string" indexed="true" stored="true" required="true"/>
    <field name="name" type="string" indexed="true" stored="true" required="true" />

修改/usr/local/solr/apache-tomcat-8.5.4/webapps/solr/solrhome/demo/conf目录下的managed-schema文件,添加如下内容:

    <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">  
        <lst name="defaults">  
            <str name="config">data-config.xml</str>  
        </lst>  
    </requestHandler>  

然后,重新启动tomcat,并访问http://192.168.229.100:8080/solr/index.html,选择demo core,打开dataimport标签页,点击execute,更新索引,如下图:

 

 打开query标签页,可以看到我们数据库中的数据,这里我们的参数q为*.*,匹配所有,如下:

定时更新索引

下载apache-solr-dataimportscheduler.jar库,并将其拷贝到/usr/local/solr/apache-tomcat-8.5.4/webapps/solr/WEB-INF/lib目录。

修改/usr/local/solr/apache-tomcat-8.5.4/webapps/solr/WEB-INF/web.xml文件,添加监听器:

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

在/usr/local/solr/apache-tomcat-8.5.4/webapps/solr/solrhome/目录新建一个conf文件夹,并在该文件夹下新建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
syncCores=demo

#  solr server name or IP address
#  [defaults to localhost if empty]
server=192.168.229.100

#  solr server port
#  [defaults to 80 if empty]
port=8080

#  application name/context
#  [defaults to current ServletContextListener's context (app) name]
webapp=solr

#  URL params [mandatory]
#  remainder of URL
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=1440

#  重做索引的参数
reBuildIndexParams=/dataimport?command=full-import&clean=true&commit=true

#  重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000;
#  两种格式:2012-04-11 03:10:00 或者  03:10:00,后一种会自动补全日期部分为服务启动时的日期
reBuildIndexBeginTime=03:00:00
复制代码

这里,我们配置每隔1分钟增量更新索引,每隔一天全量更新索引(每天03:00:00)。

重启tomcat,观察日志,发现每分钟会自动增量更新索引;

也可以自己做个小测试,往数据库插入数据,然后搜索,发现找不到,但是等过了1分钟再次搜索,发现可以找到。

PS:如果启动tomcat报空指针异常,或定时增量更新失败,可以参考如下文章,我自己打的一个jar包,在5.5.3版本下,经测试,定时增量和全量更新索引功能正常。

本文转自风一样的码农博客园博客,原文链接:http://www.cnblogs.com/chenpi/p/6047909.html,如需转载请自行联系原作者

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
9天前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
50 23
|
10天前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
43 22
|
13天前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
55 25
|
1月前
|
NoSQL Java 关系型数据库
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
150 26
|
2月前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
213 3
|
2月前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
104 3
|
2月前
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
481 1
|
3月前
|
安全 应用服务中间件 网络安全
Tomcat如何配置PFX证书?
【10月更文挑战第2天】Tomcat如何配置PFX证书?
312 7
|
3月前
|
存储 算法 应用服务中间件
Tomcat如何配置JKS证书?
【10月更文挑战第2天】Tomcat如何配置JKS证书?
502 4
|
7天前
|
网络协议 Java 应用服务中间件
centos7环境下tomcat8的安装与配置
本文介绍了在Linux环境下安装和配置Tomcat 8的详细步骤。首先,通过无网络条件下的文件交互软件(如Xftp 6或MobaXterm)下载并解压Tomcat安装包至指定路径,启动Tomcat服务并测试访问。接着,修改Tomcat端口号以避免冲突,并部署Java Web应用项目至Tomcat服务器。最后,调整Linux防火墙规则,确保外部可以正常访问部署的应用。关键步骤包括关闭或配置防火墙、添加必要的端口规则,确保Tomcat服务稳定运行。