在Linux環境下,將Solr部署到tomcat7中,匯入Mysql資料庫資料, 定時更新索引,solrtomcat7

來源:互聯網
上載者:User

在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 - inactivesyncEnabled=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 deploymentsyncCores=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 URLparams=/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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.