導言
說起Apache Lucene,可以說無人不知,無人不曉,但是說道Apache Solr,恐怕知道的不多。看看Apache Solr的說明:
Solr是一個基於Lucene java庫的企業級搜索服務器,包含XML/HTTP,JSON API, 高亮查詢結果,faceted search(不知道該如何翻譯,片段式搜索),緩存,複製還有一個WEB管理界面。Solr運行在Servlet容器中。所以Solr和Lucene的本質區別有以下三點:搜索服務器,企業級和管理。Lucene本質上是搜索庫,不是獨立的應用程序,而Solr是。Lucene專注於搜索底層的建設,而Solr專注於企業應用。Lucene不負責支撐搜索服務所必須的管理,而Solr負責。所以說,一句話概括Solr: Solr是Lucene面向企業搜索應用的擴展。
在本篇文章中,我們先看看Solr向我們承諾了什麼,或者說Solr宣稱的特性們。
無廢話Solr
Solr是一個擁有象WebService一樣接口的獨立運行的搜索服務器。你將能夠通過HTTP協議以XML格式將文檔放入搜索服務器(這個過程叫做索引),你能夠通過HTTP協議的GET來查詢搜索服務器並且得到XML格式的結果。Solr的特性包括:- 高級的全文搜索功能
- 專爲高通量的網絡流量進行的優化
- 基於開放接口(XML和HTTP)的標準
- 綜合的HTML管理界面
- 可伸縮性-能夠有效地複製到另外一個Solr搜索服務器
- 使用XML配置達到靈活性和適配性
- 可擴展的插件體系
Solr使用Lucene並且擴展了它!
- 一個真正的擁有動態域(Dynamic Field)和唯一鍵(Unique Key)的數據模式(Data Schema)
- 對Lucene查詢語言的強大擴展!
- 支持對結果進行動態的分組和過濾
- 高級的,可配置的文本分析
- 高度可配置和可擴展的緩存機制
- 性能優化
- 支持通過XML進行外部配置
- 擁有一個管理界面
- 可監控的日誌
- 支持高速增量式更新(Fast incremental Updates)和快照發布(Snapshot Distribution)
Schema(模式)
- 定義域類型和文檔的域
- 能夠驅動智能處理
- 聲明式的Lucene分析器規範
- 動態域能夠隨時增加域
- 拷貝域功能允許對一個域進行多種方式的索引,或者將多個域聯合成一個可搜索的域
- 顯式類型能夠減少對域類型的猜測
- 能夠使用外部的基於文件的終止詞列表,同義詞列表和保護詞列表的配置
查詢
- 擁有可配置響應格式(XML/XSLT,JSON,Python,Ruby)的HTTP接口
- 高亮的上下文搜索結果
- 基於域值和顯式查詢的片段式搜索(Faceted Search)
- 對查詢語言增加了排序規範
- 常量的打分範圍(Constant scoring range)和前綴式查詢-沒有idf,coord,或者lengthNorm因子,對查詢匹配的詞沒有數量限制
- 函數查詢(Function Query)-通過關於一個域的數值或順序的函數對打分進行影響
- 性能優化
核心
- 可插拔的查詢句柄(Query Handler)和可擴展的XML數據格式
- 使用唯一鍵的域能夠增強文檔唯一性
- 能夠高效地進行批量更新和刪除
- 用戶可配置的文檔索引變化觸發器(命令)
- 併發控制的搜索器
- 能夠正確處理數字類型,從而能夠進行排序和範圍搜索
- 能夠控制缺失排序域的文檔
- 支持搜索結果的動態分組
緩存
- 可配置的查詢結果,過濾器,和文檔緩存實例
- 可插拔的緩存實現
- 後臺緩存熱啓:當一個新的搜索器被打開時,可配置的搜索將它熱啓,避免第一個結果慢下來,當熱啓時,當前搜索器處理目前的請求(???)。
- 後臺自動熱啓:當前搜索器緩存中最常訪問的項目在新的搜索器中再次生成,能夠在索引器和搜索器變化的時候高速緩存常查詢的結果
- 快速和小的過濾器實現
- 支持自動熱啓的用戶級別的緩存
複製
- 能夠將使用rsync傳輸時改變的索引部分有效的發佈
- 使用拉策略(Pull Strategy)來簡化增加搜索器
- 可配置的發佈間隔能夠允許對時間線和緩存使用進行權衡選擇
管理接口
- 能夠對緩存使用,更新和查詢進行綜合統計
- 文本分析調試器,能夠顯示每個分析器每個階段的結果
- 基於WEB的查詢和調試輸出:解析查詢輸出,Lucene的explain方法細節,能夠解釋爲何某個文檔打分低,被排除在結果中等等
-------------------------------------------------------------------------------------------配置------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
下載solr(1.4.1)以及tomcat(6.0.35)
解壓solr將目錄下apache-solr-1.4.1\dist\的apache-solr-1.4.1.war文件複製到apache-tomcat-6.0.35\webapps\下,並改名爲:solr.war
在tomcat目錄下:
apache-tomcat-6.0.35\conf\Catalina\localhost\
新增solr.xml
內容爲:
<Context docBase="/apache-solr-1.4.1.war" debug="0" crossContext="true" >
<Environment name="solr/home" type="java.lang.String" value="E:/source/apache-solr-1.4.1/example/solr" override="true" />
</Context>
Context docBase=“solr.war的目錄,如果放在了/tomcat安裝目錄/webapps下,則是這麼/solr.war”
Environment name="solr/home"必須這麼寫,可能solr默認爲solr的home目錄(記住必須這麼寫)。
Environment value="E:\source\apache-solr-1.4.1\example\solr" 值,是solr目錄,就是包括bin,conf等目錄,一定要有.
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
啓動tomcat.輸入 http://localhost:8080/solr/admin/出現管理頁面。
若出現錯誤
報錯: java.lang.RuntimeException: Can't find resource 'solrconfig.xml' in classpath or 'solr\.\conf/',
現將解決辦法記錄下來:
1、將solr目錄下,dist目錄中的apache-solr-3.4.0.war 改名爲solr.war文件部署到tomcat的webapps目錄中
2、將solr目錄中example/solr子目錄中的data和conf兩個目錄拷貝到第一步中webapps下的solr目錄中(需要啓動一次tomcat,會自動 將war解壓,這樣就會生成solr目錄)3、修改tomcat的catalina.bat文件,在開始的地方添加JAVA_OPTS如下:
set JAVA_OPTS=%JAVA_OPTS% -Dsolr.solr.home=D:\works\jee\apache-tomcat-6.0.20\webapps\solr
注意,將solr.solr.home變量添加到系統環境變量中也不行,需要將其作爲java的啓動選項。
最後,重啓tomcat,可以看到沒有報錯信息,接下來可以測試了。