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表示已刪除的數據,不需要建立索引。
至於什麼叫做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的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,如下圖:
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