最近準備為一個產品做一個站內的搜索引擎,是一個java產品。由于原來做過Lucene.net,所以自然而然的就想到了使用Lucene。在復習Lucene的過程中發現了Solr這個和Lucene綁定在一起的Apache的子項目,發現這個搜索服務器正是我們想要的。原來我們做Lucene,會把索引和搜索都放在同一個網站下,也就是在網站啟動的時候,或定時在網站應用程序中進行Lucene的初始化和索引,并使用Lucene搜索API提供搜索服務。這個過程,應用網站既提供了搜索內容的提供者(從數據庫或文件提取數據給Lucene索引),也是搜索內容的索引者,又是用戶搜索服務的結果提供者。這很明顯是不夠理想的,特別是在分布式集群部署環境下。Solr的出現,正好幫助我們解決了這個問題。單一的搜索服務被獨立出來,提供數據的索引和搜索,并且這個搜索服務可以方便的為多個應用進行服務。余下的就是把搜索內容提供者也分離出來,形成一個或多個獨立的服務。這樣服務于服務之間的耦合就降低了,業務和功能的變化,都可以在某一個角色服務中處理,而不需要影響其他的服務。最重要的,Solr可以提供基于Http和xml的Web API,使它可以跨平臺和語言進行服務。集群和分布式部署也變的更容易、風險更低,并且會更有針對性。新的搜索架構就會變成下圖這樣:

首先我們先來安裝solr。安裝solr比較簡單。我的安裝是在windows環境下進行,tomcat7 + solr 10.1。
1. 在網上下載solr的安裝包,解壓縮文件。
2. 找到solr.war文件,把文件復制到tomcat的webapps文件夾下,在這之前如果你的tomcat是運行著的,則先要停止運行。
3. 把example/resources/log4j.PRoperties 復制到$CATALINA_HOME/lib/ 目錄下。
4. 然后把下載包中的solr-4.x.0/example/solr 文件夾復制到你希望存儲的本地文件夾D:/solr下,這個文件夾會作為solr索引文件的存放目錄:$SOLR_HOME。
5. 運行tomcat。把下載的文件example/lib/ext目錄下的所有jar包復制到tomcat的webapps目錄下的solr/WEB-INF/lib文件夾下。
6. 配置$SOLR_HOME。還是在tomcat的webapps/solr/WEB-INF目錄下,找到web.xml文件,放開<env-entry>節點,配置上$SOLR_HOME,如下:
<env-entry> <env-entry-name>solr/home</env-entry-name> <env-entry-value>d:/solr</env-entry-value> <env-entry-type>java.lang.String</env-entry-type> </env-entry>
完成上述步驟以后,重新啟動tomcat,訪問http://localhost:8080/solr/確認是否配置正常。

solr安裝好以后,我們需要測試solr是否可以正確運行。solr的搜索是基于文檔的,沒有文檔,solr什么也搜索不到。所以我們現在就要嘗試著添加文檔。在solr的下載包里面有一些用于測試的文檔,在example/exampledocs文件夾下。另外在這個文件夾下還有一個基于java命令行的測試工具post.jar,我們將使用這些文檔和工具來作為測試。
使用命令 java -Durl=http://localhost:8080/solr/update -jar post.jar *.xml 把文件夾下所有的xml文件上傳到solr上去,并索引。這樣添加Document的工作就算完成。

經過上一步的添加,14個document已經被索引到solr服務器中,我們就可以進行查詢了。在瀏覽器中輸入http://localhost:8080/solr/select?q=video,服務器將會返回一個xml文檔,<result>標簽下有多個<doc>標簽,每一個<doc>就是被搜索到的和查詢參數有關的document。如下圖:

至此,solr已經安裝成功,下一篇將介紹solr的相關基本概念。
新聞熱點
疑難解答