Solr學習筆記(1) —— Solr概述&Solr的安裝
一、概述
使用Solr實現電商網站中商品資訊搜尋功能,可以根據關鍵字、分類、價格搜尋商品資訊,也可以根據價格進行排序。
1.1 實現方法
在一些大型入口網站、電子商務網站等都需要站內搜尋功能,使用傳統的資料庫查詢方式實現搜尋無法滿足一些高階的搜尋需求,比如:搜尋速度要快、搜尋結果按相關度排序、搜尋內容格式不固定等,這裡就需要使用全文檢索技術實現搜尋功能。
-
使用Lucene實現:單獨使用Lucene實現站內搜尋需要開發的工作量較大,主要表現在:索引維護、索引效能優化、搜尋效能優化等,因此不建議採用。
-
使用solr實現:基於Solr實現站內搜尋擴充套件性較好並且可以減少程式設計師的工作量,因為Solr提供了較為完備的搜尋引擎解決方案,因此在門戶、論壇等系統中常用此方案。
1.2 什麼是solr
Solr 是Apache下的一個頂級開源專案,採用Java開發,它是基於Lucene的全文搜尋伺服器。Solr提供了比Lucene更為豐富的查詢語言,同時實現了可配置、可擴充套件,並對索引、搜尋效能進行了優化。
Solr可以獨立執行,執行在Jetty、Tomcat等這些Servlet容器中,Solr 索引的實現方法很簡單,用 POST 方法向 Solr 伺服器傳送一個描述 Field 及其內容的 XML 文件,Solr根據xml文件新增、刪除、更新索引 。Solr 搜尋只需要傳送 HTTP GET 請求,然後對 Solr 返回Xml、json等格式的查詢結果進行解析,組織頁面佈局。Solr不提供構建UI的功能,Solr提供了一個管理介面,通過管理介面可以查詢Solr的配置和執行情況。
1.3 Solr與Lucene的區別
Lucene是一個開放原始碼的全文檢索引擎工具包,它不是一個完整的全文檢索引擎,Lucene提供了完整的查詢引擎和索引引擎,目的是為軟體開發人員提供一個簡單易用的工具包,以方便的在目標系統中實現全文檢索的功能,或者以Lucene為基礎構建全文檢索引擎。
Solr的目標是打造一款企業級的搜尋引擎系統,它是一個搜尋引擎服務,可以獨立執行,通過Solr可以非常快速的構建企業的搜尋引擎,通過Solr也可以高效的完成站內搜尋功能。
二、Solr安裝及配置
2.1 Solr的下載
Solr官方網站:http://lucene.apache.org/solr/
2.2 Solr的資料夾結構
將solr-4.10.3.zip解壓:
-
bin:solr的執行指令碼
-
contrib:solr的一些貢獻軟體/外掛,用於增強solr的功能。
-
dist:該目錄包含build過程中產生的war和jar檔案,以及相關的依賴檔案。
-
docs:solr的API文件
-
example:solr工程的例子目錄:
- example/solr:該目錄是一個包含了預設配置資訊的Solr的Core目錄。
-
example/multicore:該目錄包含了在Solr的multicore中設定的多個Core目錄。
-
example/webapps:該目錄中包括一個solr.war,該war可作為solr的執行例項工程。
- licenses:solr相關的一些許可資訊
2.3 執行環境
solr 需要執行在一個Servlet容器中,Solr4.10.3要求jdk使用1.7以上,Solr預設提供Jetty(java寫的Servlet容器),本教程使用Tocmat作為Servlet容器。
2.4 Solr整合tomcat
2.4.1 Solr Home與SolrCore
建立一個SolrHome目錄,SolrHome是Solr執行的主目錄,目錄中包括了執行Solr例項所有的配置檔案和資料檔案,Solr例項就是SolrCore,一個SolrHome可以包括多個SolrCore(Solr例項),每個SolrCore提供單獨的搜尋和索引服務。
example\solr是一個solr home目錄結構,如下:
上圖中“collection1”是一個SolrCore(Solr例項)目錄 ,目錄內容如下所示:
說明:
-
- collection1:叫做一個Solr執行例項SolrCore,SolrCore名稱不固定,一個solr執行例項對外單獨提供索引和搜尋介面。
- solrHome中可以建立多個solr執行例項SolrCore。
- 一個solr的執行例項對應一個索引目錄。
- conf是SolrCore的配置檔案目錄 。
- data目錄存放索引檔案需要建立
2.4.2 整合步驟
第一步:把\solr-4.10.3\dist\solr-4.10.3.war複製到tomcat 的webapp目錄下,改名為solr.war。
第二步:solr.war解壓。使用壓縮工具解壓或者啟動tomcat自動解壓。解壓之後刪除solr.war
第三步:把\solr-4.10.3\example\lib\ext目錄下的所有的jar包新增到solr工程中
第四步:配置solrHome和solrCore
1)建立一個solrhome(存放solr所有配置檔案的一個資料夾)。\solr-4.10.3\example\solr目錄就是一個標準的solrhome。
2)把\solr-4.10.3\example\solr資料夾複製到D:\temp路徑下,改名為solrhome,改名不是必須的,是為了便於理解。
3)在solrhome下有一個資料夾叫做collection1這就是一個solrcore。就是一個solr的例項。一個solrcore相當於mysql中一個數據庫。Solrcore之間是相互隔離。
-
-
- 在solrcore中有一個資料夾叫做conf,包含了索引solr例項的配置資訊。
- 在conf資料夾下有一個solrconfig.xml。配置例項的相關資訊。如果使用預設配置可以不用做任何修改
<!-- solr服務依賴的擴充套件包,預設的路徑是collection1\lib資料夾,如果沒有就建立一個 --> <lib dir="${solr.install.dir:../../..}/contrib/extraction/lib" regex=".*\.jar" /> <lib dir="${solr.install.dir:../../..}/dist/" regex="solr-cell-\d.*\.jar" /> <lib dir="${solr.install.dir:../../..}/contrib/clustering/lib/" regex=".*\.jar" /> <lib dir="${solr.install.dir:../../..}/dist/" regex="solr-clustering-\d.*\.jar" /> <lib dir="${solr.install.dir:../../..}/contrib/langid/lib/" regex=".*\.jar" /> <lib dir="${solr.install.dir:../../..}/dist/" regex="solr-langid-\d.*\.jar" /> <!-- 配置了索引庫的存放路徑。預設路徑是collection1\data資料夾,如果沒有data資料夾,會自動建立。--> <dataDir>${solr.data.dir:}</dataDir> <!-- name="/select":查詢時使用的URL --> <requestHandler name="/select" class="solr.SearchHandler"> <lst name="defaults"> <str name="echoParams">explicit</str> <int name="rows">10</int> <str name="df">text</str> </lst> </requestHandler> <!-- name="/update":維護索引時使用的URL --> <requestHandler name="/update" class="solr.UpdateRequestHandler"> <!-- See below for information on defining updateRequestProcessorChains that can be used by name on each Update Request --> <!-- <lst name="defaults"> <str name="update.chain">dedupe</str> </lst> --> </requestHandler>
-
第五步:告訴solr伺服器配置檔案也就是solrHome的位置。修改solr專案的web.xml。
第六步:啟動tomcat
第七步:訪問http://localhost:8080/solr/,進入solr後臺管理
2.5 配置中文分析器
2.5.1 Schema.xml
schema.xml,在SolrCore的conf目錄下,它是Solr資料表配置檔案,它定義了加入索引的資料的資料型別的。主要包括FieldTypes、Fields和其他的一些預設設定。