1. 程式人生 > >【Solr】- Apache SolrTM 5.3.1 Documentation

【Solr】- Apache SolrTM 5.3.1 Documentation

Solr Quick Start: Apache Solr官網翻譯

概要

文件主要包含Solr啟動、執行Solr匯入各種形式的資料來源到多個集合中,近距離體驗Solr管理員和搜尋介面

要求

  • 系統要求
  • Apache Solr 釋出包

開始

執行瀏覽器顯示指南,同一臺機器上的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 Cloud: Solr 基於Zookeeper構建的分散式搜尋系統,zookeeper保證高可用

Collection: 對應standby模式下的Solr Core

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提供的索引資料服務是相同的

Replica: Shard真實物理儲存,可提供類似HDFS的備份機制保證冗餘特性

Solr的命令表

Linux:

  • 普通solr命令:solr start -s /usr/local/hadoop/solr-5.3.1/server/solr
  • 啟動Solr Cloud指令:
    • bin/solr start -e cloud –noprompt

命令分析:Solr Cloud 測試樣例,會在 example下建立cloud目錄,並且建立兩個物理節點Node01、Node02, gettingstarted是邏輯意義上的Solr Core, Solr Core通過分片包含2個備份

Windows啟動Solr命令:solr start(預設引數啟動)

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

解釋:

  • SolrHome:Solr所有的索引資料集合
  • Gettingstarted:Solr Core名稱

索引資料

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 檔案目錄

Rich是指HMTL/PDF/MSOffice/簡單文字,bin/post工具支援檔案目錄處理(包含子目錄),並且將少量的內容匯入Solr,便於查詢和索引,Solr安裝目錄包含doc的子目錄,可以很方便的通過下面命令將檔案匯入到Solr索引庫:

bin/post -c gettingstarted docs/

命令引數詳解

  • -c gettingstarted:索引匯入Solr Core的名稱
  • docs/:solr安裝目錄下doc目錄相對路徑

現在可索引儲存在gettingstarted的成千上萬的檔案並且提交索引更新,使用者可以通過Solr Admin UI的Query選項卡搜尋“solr”關鍵字,在‘q’一行使用自定義的內容取代’*’,然後點選”Execute Query”查詢相關資訊

建立資料索引,重新執行匯入索引命令:bin/post -c gettingstarted docs/後,重新匯入同一個Collection索引資料會清空原先的資料之後才會存入索引資料。

索引Solr xml

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資料,資料可能是首先不會非理想化顯示,但是可以通過模板定製)

索引庫資料檢視

索引JSON:

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檔案:

CSV檔案是將資料匯入Solr一個比較好的方式,特別是當文件是有相同一組的屬性時,CSV可以很方便的從Excel或者從資料庫(例如mysql)中匯出。當SOlr啟動時,可以很容易將結構化資料匯出為CSV格式,然後將資料存入Solr,而不是需要額外的匯入步驟

測試命令:bin/post -c gettingstarted example/exampledocs/books.csv

其他的索引管理技術:

  • 通過Data Import Handler (DIH).從資料庫將資料匯入Solr
  • 通過Solr的Java客戶端SolrJ管理索引
  • 通過Admin UI匯入:Documents選項卡

更新資料:

注意到即使索引這個指南中的內容超過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引數解釋:

  • q:query:查詢條件:URL-encod編碼
  • wt:solr相應內容的輸出格式
  • indent:內容是否切割:主要讓solr響應內容格式化顯示,否則非格式化顯示,全部堆在一起不美觀

查詢基礎:

  1. 單一條件限定查詢 單一條件查詢主要設定“q“引數,用實際的域值替換“:”,例如搜尋“foundation”,使用curl指令:
curl http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=foundation

Solr頁面顯示:

  1. 短語搜尋:通俗點就是關鍵字組合查詢 測試案例:
curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=\"CAS+latency\""

Sor結果頁面:

  1. 聯合查詢

預設使用多關鍵字或短語查詢時,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:垂直搜尋

Solr最受歡迎的功能是Faceting,Faceting執行搜尋結果歸檔為子集/Buckets/Categories,並且提供每個子集的數量,Faceting的種類:filed values, numeric and date ranges, pivots (decision tree), and arbitrary query faceting.

Faceting: 對已經搜尋出來的結果進一步的切分,例如汽車搜尋,solr應該顯示全部的包含汽車字樣,但是可以通過faceting將汽車劃分為卡車、轎車等型別,使用者可以直接點選對應的汽車型別得到對應的結果,也可以檢視卡車對應的數量統計等,Facating實際上相當於一個內容過濾的角色

Field facets

Solr可以提供搜尋結果,Solr facets可以通過查詢返回搜尋文件的數量,每個文件在結果集包含唯一的關鍵字,在Solr Admin UI選項卡,可以選中“facet”複選框,可以看到和faceted相關的可選引數

分析:類似搜尋“電腦”,solr返回電腦分類:例如聯想商品數量:100,惠普電腦250情況,還可以通過時間等維度進行搜尋

Range Facets:

對於數字和日期經常描述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

Pivot Facets:

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本

Spatial

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入門指南應瞭解:

  • 在SolrClund模式下啟動Solr
  • 索引富文字檔案/XML檔案/JSON檔案/CSV檔案
  • 開啟Solr Admin控制檯,使用查詢介面獲取JSON個數的輸出結果
  • 開啟/browse介面以更加友好的方式和熟悉的介面展示Solr顯示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的