Solr Quick Start: Apache Solr官網翻譯java
文檔主要包含Solr啓動、運行Solr導入各類形式的數據源到多個集合中,近距離體驗Solr管理員和搜索接口mysql
運行瀏覽器顯示指南,同一臺機器上的Solr服務器指南幫助正確入門Solr Server 開始解壓Solr發佈包,將Solr的解壓目錄放在工做目錄下,注意基礎目錄名可能與下載的Solr的版本號不一樣,例如Unix、Cygwin或者MacOS的shell版本不一樣linux
:$ ls solr* solr-5.0.0.zip :$ unzip -q solr-5.0.0.zip :$ cd solr-5.0.0/
Solr Cloud: Solr 基於Zookeeper構建的分佈式搜索系統,zookeeper保證高可用sql
Collection: 對應standby模式下的Solr Coreshell
Shard(分片): 對應Collection邏輯劃分的Core,可理解爲多個Shard組成一個完整意義上的Solr Core,如果單機模式下:1 Solr Core = 1 Shard = 1 Core = 1 replica,Shard對於用戶是透明的,主要經過上一層的Collection提供一個Façade接口數據庫
Core: Solr Core 1個包含索引和配置文件的運行實例,一個Core對應一個Replica實際提供索引服務,SolrCloud提供冗餘機制,多個Replica提供的索引數據服務是相同的apache
Replica: Shard真實物理存儲,可提供相似HDFS的備份機制保證冗餘特性編程
命令分析:Solr Cloud 測試樣例,會在 example下建立cloud目錄,而且建立兩個物理節點Node0一、Node02, gettingstarted是邏輯意義上的Solr Core, Solr Core經過分片包含2個備份json
Windows啓動Solr命令:solr start(默認參數啓動)windows
Windows關閉Solr命令:solr stop –all
Solr Admin UI查看Solr運行狀態:http://localhost:8983/solr/
SolrCloud 運行在2個節點,端口7574和端口8983,命令執行後默認自動建立的Solr Core: gettingstarted,gettingstarted由兩個shard組成,每一個shard存在2個replica,Solr的管理員界面Cloud Tab 很好的展現Collection
解釋:
Solr服務器啓動、運行後不包含數據,Solr安裝目錄包含bin/post 工具,主要是幫助將各類類型的文檔在Solr啓動的時候導入Solr,這裏將Post工具用於索引下面的案例。須要在Solr的安裝目錄下使用命令shell運行案例。
注意:bin/post工具和windows 腳本徹底不同,可是內部調用的Java程序是可得到的,詳情請看:https://cwiki.apache.org/confluence/display/solr/Post+Tool#PostTool-Windows
Rich是指HMTL/PDF/MSOffice/簡單文本,bin/post工具支持文件目錄處理(包含子目錄),而且將少許的內容導入Solr,便於查詢和索引,Solr安裝目錄包含doc的子目錄,能夠很方便的經過下面命令將文件導入到Solr索引庫:
bin/post -c gettingstarted docs/
命令參數詳解:
如今可索引存儲在gettingstarted的成千上萬的文件而且提交索引更新,用戶能夠經過Solr Admin UI的Query選項卡搜索「solr」關鍵字,在‘q’一行使用自定義的內容取代’*’,而後點擊」Execute Query」查詢相關信息
創建數據索引,從新運行導入索引命令:bin/post -c gettingstarted docs/後,從新導入同一個Collection索引數據會清空原先的數據以後纔會存入索引數據。
Solr支持索引各類格式的結構化內容,結構化內容數據能夠經過Solr XML格式導入Solr,經過Solr XML,solr索引工做者一般能夠編碼經過POST請求的形式直接去訪問Solr的/update的方法將必定範圍的內容寫入Solr。
Solr的安裝目錄包example目錄包含許多Solr XML格式文件,這些techproducts需特定的配置, bin/solr腳本包含支持配置,可經過bin/solr start –e 參數值,這種方式在啓動solr的同時建立Collection
bin/post: 索引在example/exanplesdocs目錄下的Solr XML文件:
測試命令:bin/post –c gettingstarted example/exampledocs/*.xml
將索引數據導入gettingstarted,如今可經過默認Solr Query語法進行搜索,注意你能夠經過http://localhost:8983/solr/gettingstarted/browse
瀏覽頁面顯示的索引的文檔儘管是粗糙、原型化、交互式的HTML視圖,可是/browse UI展現Solr技術能力(/browse視圖默認gettingstarted schema和數據格式默認結構化XML、JSON、CSV樣例數據和非結構化rich數據,數據多是首先不會非理想化顯示,可是能夠經過模板定製)
Solr支持索引JSON數據:任意的結構化JSON或者相似Solr XML的「Solr JSON」,Solr example目錄包含Solr Json測試文件,使用bin/post,創建JSON 文件索引:
bin/post -c gettingstarted example/exampledocs/books.json windows命令:java -Durl=http://localhost:8080/solr/collection/update -jar post.jar *.json
爲了扁平化(索引數據切割:相似Spark的RDD分割Partition)和索引任意的結構化JSON,能夠查看ansforming and Indexing Custom JSON data.
CSV文件是將數據導入Solr一個比較好的方式,特別是當文檔是有相同一組的屬性時,CSV能夠很方便的從Excel或者從數據庫(例如mysql)中導出。當SOlr啓動時,能夠很容易將結構化數據導出爲CSV格式,而後將數據存入Solr,而不是須要額外的導入步驟
測試命令:bin/post -c gettingstarted example/exampledocs/books.csv
其餘的索引管理技術:
注意到即便索引這個指南中的內容超過1次,solr也不會出現重複的結果,由於schema.xml文件指定了名爲「id」,「uniqueKey」域,不管何時使用POST命令以相同的uniqueKey提交文檔,solr會自動提替換(相似Map屬性,key相同的值老是會被最新的值替代),咱們能夠經過Solr Admin UI的Overview視圖的num Docs和Max Doc屬性驗證這個過程:
Num Docs:表示可檢索的文檔數量(可能大於XML\JSON\CSV文件的總和,由於一些rich 文件可能包含多個文件:例如Work文檔裏面內嵌文檔)
Max Docs:可能比Num Docs更大,由於Max Docs包含邏輯上已刪除可是物理還未從索引刪除的文檔
注意:可能每次咱們使用post命令重複提交索引,可是Num Docs並未增加,多是uniquekey相同時新索引取代舊索引,形成索引內容可能改變但數量不變,能夠經過提交同一個樣本文件,可是每次提交前修改內容,經過相同的id查詢會獲得不一樣的結果
可經過更新URL經過提交delete命令,而且指定文檔的uniquekey域或設置查詢條件去刪除索引數據 測試命令:
bin/post -c gettingstarted -d "<delete><id>SP2514N</id></delete>"
驗證:經過Solr Admin UI的Query Tab q欄輸入:id:」key」去驗證索引數據是否真正刪除
Solr查詢可經過REST客戶端、CURL、wget、Chrome POSTMAN等方式,能夠爲許多編程語言提供相似本地客戶端的體驗,Solr Admin UI包含一個solr查詢接口:能夠看Sorl Admin UI的query Tab,若是不設置篩選條件點擊「Execute Query「按鈕,將會獲取默認的10條JSON格式的索引記錄
Solr查詢表達式:」域名」:」域值」:*:*表示匹配全部的數據
Solr默認查詢10條數據由「start,rows「欄的rows指定,提供分頁效果
Solr Admin UI訪問的URL在結果窗口的頂端呈現灰色的效果,點擊以後將會顯示Solr的響應數據,也可使用curl命令行:
curl "http://localhost:8983/solr/gettingstarted/select?q=\*%3A*&wt=json&indent=true"
URL參數解釋:
curl http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=foundation
Solr頁面顯示:
curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=\"CAS+latency\""
Sor結果頁面:
默認使用多關鍵字或短語查詢時,solr僅僅要求匹配的文檔中存在,結果列表中包含關鍵字越多的信息按順序顯示,用戶能夠要求一個關鍵字以「+「或」-「做爲前綴。查詢的關鍵字包含「one」和「three」,能夠經過「+」進行鏈接,可是URL中會使用URL Encoder進行轉碼傳輸 案例:
curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=%2Bone+%2Bthree"
更多的Solr的query可參考:https://cwiki.apache.org/confluence/display/solr/Searching
Solr最受歡迎的功能是Faceting,Faceting運行搜索結果歸檔爲子集/Buckets/Categories,而且提供每一個子集的數量,Faceting的種類:filed values, numeric and date ranges, pivots (decision tree), and arbitrary query faceting.
Faceting: 對已經搜索出來的結果進一步的切分,例如汽車搜索,solr應該顯示所有的包含汽車字樣,可是能夠經過faceting將汽車劃分爲卡車、轎車等類型,用戶能夠直接點擊對應的汽車類型獲得對應的結果,也能夠查看卡車對應的數量統計等,Facating實際上至關於一個內容過濾的角色
Solr能夠提供搜索結果,Solr facets能夠經過查詢返回搜索文檔的數量,每一個文檔在結果集包含惟一的關鍵字,在Solr Admin UI選項卡,能夠選中「facet」複選框,能夠看到和faceted相關的可選參數
分析:相似搜索「電腦」,solr返回電腦分類:例如聯想商品數量:100,惠普電腦250狀況,還能夠經過時間等維度進行搜索
對於數字和日期常常描述facet數據在某個範圍,而不是分離實際值,通俗說就是在某個區間範圍內搜索結果,例如淘寶的商品價格、日期等方位搜索
測試案例:
curl http://localhost:8983/solr/gettingstarted/select?q=*:*&wt=json&indent=on&rows=0&facet=true&facet.range=price&f.price.facet.range.start=0&f.price.facet.range.end=600&f.price.facet.range.gap=50&facet.range.other=after
Priot Facets相似決策樹,容許兩個或以上的fields組合查詢,測試案例
curl http://localhost:8983/solr/gettingstarted/select?q=*:*&rows=0&wt=json&indent=on&facet=on&facet.pivot=cat,inStock
結果說明:book類的關於Cat的書,仍在賣的有12本,沒有在賣的有2本
Solr支持位置限制支持,在指定的位置的距離範圍內搜素,結果並按照距離排序,甚至能夠經過距離改善結果,相似如今的LBS服務。測試數據目錄:
example/exampledocs/*.xml,文件包含有表面Spatial能力表述的定位信息,運行測試,測試方法查看:techproducts example section,Spatial查詢能夠和其餘類型的查詢緩和使用,例如查詢距離舊金山「ipod」的關鍵字: http://localhost:8983/solr/techproducts/browse?q=ipod&pt=37.7752%2C-122.4232&d=10&sfield=store&fq=%7B%21bbox%7D&queryOpts=spatial&queryOpts=spatial
Spatial:對匹配的結果進一步的篩選,結果更精確
經過Solr入門指南應瞭解:
下面是開始Solr入門指南的關鍵指令:linux/unix腳本
bin/solr start -e cloud -noprompt ; open http://localhost:8983/solr ; bin/post -c gettingstarted docs/ ; open http://localhost:8983/solr/gettingstarted/browse ; bin/post -c gettingstarted example/exampledocs/*.xml ; bin/post -c gettingstarted example/exampledocs/books.json ; bin/post -c gettingstarted example/exampledocs/books.csv ; bin/post -c gettingstarted -d "<delete><id>SP2514N</id></delete>" ; bin/solr healthcheck -c gettingstarted ;
注意:gettingstarted是solr core的名稱須要手動建立而後導入
清理: 中止Solr和恢復Solr爲初始狀態,可以使用下面的指令
bin/solr stop -all ; //關閉solar rm -Rf example/cloud/ /刪除Solr的數據文件