程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 在Linux環境下,將Solr部署到tomcat7中,導入Mysql數據庫數據, 定時更新索引,solrtomcat7

在Linux環境下,將Solr部署到tomcat7中,導入Mysql數據庫數據, 定時更新索引,solrtomcat7

編輯:JAVA綜合教程

在Linux環境下,將Solr部署到tomcat7中,導入Mysql數據庫數據, 定時更新索引,solrtomcat7


什麼是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,即1天; 
#  為空,為0,或者注釋掉:表示永不重做索引
reBuildIndexInterval=2

#  重做索引的參數
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

這裡,我們配置兩分鐘更新索引。

重啟tomcat,觀察日志,發現每隔兩分鐘會自動更新索引;

也可以自己做個小測試,往數據庫插入數據,然後搜索,發現找不到,但是等過了兩分鐘再次搜索,發現可以找到。

資源文件

https://github.com/peterchenhdu/Demos/tree/master/solr-in-tomcat

 

參考:https://cwiki.apache.org/confluence/display/solr/Apache+Solr+Reference+Guide

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved