Solr6.6理解和環境搭建
前言
為什么要引入Solr,它到底有什么優勢。假想有這樣一種情況,當我們在oracle去查詢一些東西,無非是使用like或者join(當查詢條件多,涉及的多表的話)這幾種操作。當數據量大的時候,很難相信在大型數據庫上去執行高速的查詢,有以下兩點原因:一是,數據庫本身在性能上缺乏亮點,所以我們總提性能。二是,松散的文本,查詢的話基本都是基於like,而join和like是數據庫的性能殺手,與最求高效快速的理念相違背。所以我們需要一種和sql完全不同的數據檢索方式,由此引出了solr。
- 1. 官方定義:
Solr是一個獨立的企業級搜索應用服務器,它對外提供類似於Web-service的API接口。用戶可以通過http請求,向搜索引擎服務器提交一定格式的XML文件,生成索引;也可以通過Http Get操作提出查找請求,並得到XML格式的返回結果。
Solr是一個基於Lucene的Java搜索引擎服務器。Solr 提供了層面搜索、命中醒目顯示並且支持多種輸出格式(包括 XML/XSLT 和 JSON 格式)。它易於安裝和配置,而且附帶了一個基於 HTTP 的管理界面。Solr已經在眾多大型的網站中使用,較為成熟和穩定。Solr 包裝並擴展了 Lucene,所以Solr的基本上沿用了Lucene的相關術語。更重要的是,Solr 創建的索引與 Lucene 搜索引擎庫完全兼容。通過對Solr 進行適當的配置,某些情況下可能需要進行編碼,Solr 可以閱讀和使用構建到其他 Lucene 應用程序中的索引。此外,很多 Lucene 工具(如Nutch、 Luke)也可以使用Solr 創建的索引。
簡單來說:solr就是一個開源的搜索引擎框架。
- 2. 原理:
Solr對外提供標准的http接口來實現對數據的索引的增加、刪除、查詢。在 Solr 中,用戶通過向部署在servlet 容器中的 Solr Web 應用程序發送 HTTP 請求來啟動索引和搜索。Solr 接受請求,確定要使用的適當SolrRequestHandler,然后處理請求。通過 HTTP 以同樣的方式返回響應。默認配置返回Solr 的標准 XML 響應,也可以配置Solr 的備用響應格式。
可以向 Solr 索引 servlet 傳遞四個不同的索引請求:
add/update 允許向 Solr 添加文檔或更新文檔。直到提交后才能搜索到這些添加和更新。
commit 告訴 Solr,提交后就可以搜索到。
optimize 重構 Lucene 的文件以改進搜索性能。索引完成后執行一下優化通常比較好。如果更新比較頻繁,則應該在使用率較低的時候安排優化。一個索引無需優化也可以正常地運行。優化是一個耗時較多的過程。(官方:執行明確的優化,導致所有段的合並到一個。)
delete 可以通過 id 或查詢來指定。按 id 刪除將刪除具有指定 id 的文檔;按查詢刪除將刪除查詢返回的所有文檔。
也就是說:solr可以對數據進行增加、刪除、查詢。
- 3. 搭建solr環境條件
JDK:jdk1.8.0
開發環境:eclipse4.7
運行環境:apache-tomcat-8.0.32
Solr:solr-6.6.0
- 4. 搭建solr
解壓solr-6.6.0,打開解壓的目錄:

bin:Solr的腳本啟動工具目錄。
contrib:放關於solr的擴展。
dist:在這里能找到Solr的核心JAR包和擴展JAR包。當我們試圖把Solr嵌入到某個應用程序的時候會用到核心JAR包。
distàsolrj-lib:包含構建基於Solr的客戶端時會用到的JAR包。
distàtest-framework:包含測試Solr時候會用到的JAR包。
docs:該文件夾里面存放的是Solr文檔,離線的靜態HTML文件,還有API的描述。
example:包含Solr的簡單示例。
licenses:各種許可和協。
server:在本地把Solr作為服務運行的必要文件都存放在這里。
- 5. 部署屬於自己的Solr
a) 將solr-6.6.0\server\solr-webapp下的webapp復制到tomcat的webapps目錄下,並改名為solr(名字可以改成其他)

b) 將solr-6.6.0\server\lib\ext的jar包復制到apache-tomcat-8.0.32\webapps\solr\WEB-INF\lib目錄下
將solr-6.6.0\dist下的solr-dataimporthandler-6.6.0.jar和solr-dataimporthandler-extras-6.6.0.jar復制到apache-tomcat-8.0.32\webapps\solr\WEB-INF\lib目錄下
將solr-6.6.0\server\lib下的以metrics開頭的5個jar包復制到apache-tomcat-8.0.32\webapps\solr\WEB-INF\lib目錄下,這三步的目標路徑都是一樣的。
如下圖:



c) 接下來創建存放core的目錄,我選擇的是E盤創建,tomcat是在D盤,在E盤創建solrhome文件夾,將solr-6.6.0\server\solr下的所有文件復制到E:\solrhome。如下圖:

d) 在tomcat下的solr里的配置文件來指定我創建的存儲core的目錄。
打開apache-tomcat-8.0.32\webapps\solr\WEB-INF下的web.xml,定位到40行,將下面一段注解打開,並修改<env-entry-value>值為E:/solrhome,
並把168行以及以下的注解掉,為什么要注解掉呢?這是一段權限代碼,也就是你在瀏覽器打開solr,其他人也可以登錄,並對core進行優化,占用和消耗資源,從而在打開solr時進行賬號密碼登錄,這里我就全部注解掉。如下圖:


注解掉
<!-- Get rid of error message -->
<!--<security-constraint>
<web-resource-collection>
<web-resource-name>Disable TRACE</web-resource-name>
<url-pattern>/</url-pattern>
<http-method>TRACE</http-method>
</web-resource-collection>
<auth-constraint/>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>Enable everything but TRACE</web-resource-name>
<url-pattern>/</url-pattern>
<http-method-omission>TRACE</http-method-omission>
</web-resource-collection>
</security-constraint>-->
e) 在apache-tomcat-8.0.32\webapps\solr\WEB-INF目錄下創建classes文件夾,並將solr-6.6.0\server\resources下的log4j.properties復制過去,如下圖:


f) 環境搭建完成,啟動tomcat,訪問localhost:8080/solr/index.html,成功訪問。

