Apache Solr:全文搜索

Apache Solr 初探

Solr簡介

Solr 是一個開源的全文搜索服務器,已經在衆多大型的網站中使用,較爲成熟和穩定。 Solr 使用 Java 語言開發,基於 Apache Lucene 實現,對Lucene進行了擴展,提供了比Lucene更爲豐富的查詢語言,同時提高了可配置、可擴展性,並對查詢性能進行了優化,而且提供了一個完善的功能管理界面。Solr 可運行在Java的Servlet容器上,如Tomcat 、Jetty等。文檔通過Http利用XML 加到一個搜索集合中。Solr查詢該集合也是通過http收到一個XML/JSON響應來實現。它的主要特性包括:高效、靈活的緩存功能,垂直搜索功能,高亮顯示搜索結果,支持多種輸出格式(包括 XML/XSLT 和 JSON 格式),通過索引複製來提高可用性,提供一套強大Data Schema來定義字段,類型和設置文本分析,提供基於Web的管理界面等。

Solr版本說明

Solr底層基於Lucene,而操作完全基於web方式Solr同時提供檢索高亮標記,動態集羣,數據庫整合,多種文檔支持的特性,因此是用來製作企業級全文檢索的一個良好的選擇。Solr完全採用Java編寫,因此具有跨平臺的能力,可以運行在Linux,Unix等多種支持Java的平臺上。而Solr既可以作爲獨立應用部署在應用程序服務器上(例如Tomcat),也可以通過的REST和JSON api來與現有的應用進行整合,因此使用起來十分靈活方便。

Solr原理

Solr對外提供標準的http接口來實現對數據的索引的增加、刪除、修改、查詢。在Solr中,用戶通過向部署在servlet 容器中的Solr Web應用程序發送HTTP 請求來啓動索引和搜索,Solr接受請求,確定要使用的適當SolrRequestHandler,然後處理請求,通過 HTTP 以同樣的方式返回響應。默認配置返回Solr的標準 XML 響應,也可以配置Solr的備用響應格式。

安裝Solr

Solr4.4要求Java運行環境(JRE)版本1.6或者更高。
方案一、命令窗口,進入根目錄下執行 java -jar start.jar
方案二、Solr.war 放入Tomcat下啓動運行(需要額外的一些配置和jar包),
參考:
http://blog.csdn.net/zhyh1986/article/details/9856115
http://www.aboutit.cn/blog/show/43
http://www.cnblogs.com/rainbowzc/p/3680029.html

中文分詞

爲什麼使用中文分詞?因爲使用全文檢索,中文分詞是離不開的,目前Solr支持中文分詞器分成兩種:IKAnalyzer和mmseg4j,兩種中文分詞需要在solr中配置,具體的配置從略。

索引操作

可以向Solr索引servlet傳遞四個不同的索引請求:
add/update允許向Solr添加文檔或更新文檔。直到提交後才能搜索到這些添加和更新。
commit 告訴Solr,應該使上次提交以來所做的所有更改都可以搜索到。
optimize 重構 Lucene 的文件以改進搜索性能。索引完成後執行一下優化通常比較好。如果更新比較頻繁,則應該在使用率較低的時候安排優化。一個索引無需優化也可以正常地運行。優化是一個耗時較多的過程。
delete 可以通過 id 或查詢來指定。按 id 刪除將刪除具有指定 id 的文檔;按查詢刪除將刪除查詢返回的所有文檔。

示例

啓動solr

以jetty爲例,執行如下之類:

user:~/solr/example$ java -jar start.jar
2012-06-06 15:25:59.815:INFO:oejs.Server:jetty-8.1.2.v20120308
2012-06-06 15:25:59.834:INFO:oejdp.ScanningAppProvider:Deployment monitor …/solr/example/webapps at interval 0
2012-06-06 15:25:59.839:INFO:oejd.DeploymentManager:Deployable added: …/solr/example/webapps/solr.war

Jun 6, 2012 3:26:03 PM org.apache.solr.core.SolrCore registerSearcher
INFO: [collection1] Registered new searcher Searcher@7527e2ee main{StandardDirectoryReader(segments_1:1)}

啓動jetty,監聽端口8983,訪問solr管理頁面:http://localhost:8983/solr/

索引數據

首次啓動的solr沒有包含任何可供搜素的數據,可以通過命令行添加/修改/刪除/更新 索引數據,在exampledocs文件夾內附帶了一些例子文件,可以通過腳本 post.sh進行數據添加,也可以通過java客戶端post.jar進行
運行 java -jar post.jar -h 查看詳細參數。
打開一個新的命令窗口,執行:

user:~/solr/example/exampledocs$ java -jar post.jar solr.xml monitor.xml
SimplePostTool: version 1.4
SimplePostTool: POSTing files to http://localhost:8983/solr/update..
SimplePostTool: POSTing file solr.xml
SimplePostTool: POSTing file monitor.xml
SimplePostTool: COMMITting Solr index changes..

這樣就索引了兩個文檔並提交了改變,訪問:http://localhost:8983/solr/collection1/select?q=solr&wt=xml,可以看到我們的搜索結果,格式xml,可以通過url中的參數修改
可以通過執行:java -jar post.jar *.xml 索引所有的例子文件.
搜索示例:
http://localhost:8983/solr/#/collection1/query?q=video
http://localhost:8983/solr/#/collection1/query?q=name:video
http://localhost:8983/solr/#/collection1/query?q=%2Bvideo%20%2Bprice%3A[*%20TO%20400]

向solr中導入數據的不同方式

Data Import Handler (DIH)
http://wiki.apache.org/solr/DataImportHandler

Load a CSV file
http://wiki.apache.org/solr/UpdateCSV

POST JSON documents
http://wiki.apache.org/solr/UpdateJSON

通過Solr Cell索引二進制文件如 Word、 PDF
http://wiki.apache.org/solr/ExtractingRequestHandler

使用SolrJ客戶端建立和查詢索引
http://wiki.apache.org/solr/Solrj

數據更新和刪除也是類似地發送指令操作

定製數據查詢

q=video&fl=name,id (return only name and id fields)
q=video&fl=name,id,score (return relevancy score as well)
q=video&fl=*,score (return all stored fields, as well as relevancy score)
q=video&sort=price desc&fl=name,id,price (add sort specification: sort by price descending)
q=video&wt=json (return response in JSON format)

通過http://localhost:8983/solr/#/collection1/query可以方便地測試定製的數據查詢返回結果是否正確

排序

通過sort參數,可以方便地對一個或多個字段進行排序,舉例:
q=video&sort=price desc
q=video&sort=price asc
q=video&sort=inStock asc, price desc
也可以使用一些複合函數,如:q=video&sort=div(popularity,add(price,1)) desc
如果沒有指定排序規則,則默認:score desc

高亮顯示

下面的例子對搜索結果中的name,features字段進行了高亮標註,高亮方式:對搜索到的結果中關鍵字添加了標籤,如:This is the result for key xxxx.
http://localhost:8983/solr/collection1/select/?wt=json&indent=on&q=video+card&fl=name,id&hl=true&hl.fl=name,features
詳細:http://wiki.apache.org/solr/HighlightingParameters

更多

solr還提供了很多高級功能,如分頁、縮略顯、自動完成、分類、統計分析、集羣等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章