Solr Reference Guide 5.3: Getting Started
Installing Solr
Got Java?
檢查 Java 版本
$ java -version
需要 1.7 或更高的版本,如果沒有的話就要安裝:
$ sudo apt-get install default-jre
Installing Solr
下載 .tgz 檔案放在 home 資料夾
$ cd ~
$ tar zxf solr-5.3.0.tgz
Running Solr
在 solr 目錄下執行 bin/solr
$ cd ~/solr-5.3.0
$ bin/solr start
出現訊息
This script requires extracting a WAR file with either the jar or unzip utility, please install these utilities or contact your administrator for assistance.
安裝 unzip
$ suto apt-get install unzip
再次執行 bin/solr
$ bin/solr start
solr 在背景啟動,監聽 8983 port.
Stop Solr
$ bin/solr stop -p 8983
stop 命令需要指定 port,也可以用 -all 參數來停止所有執行中的 Solr instances。
使用某個範例設定來執行 Solr
例如要執例 techproducts 這個範例:
$ bin/solr -e techproducts
檢查 Solr 是否有在執行
$ bin/solr status
也可以用 Browser 連到 Admin Cosole 確認:http://localhost:8983/solr/
如果是從 client 端連到 server,要確定防火牆 8983 port 有打開:
$ sudo ufw status
$ sudo ufw enable
$ sudo ufw allow 8983
Create a Core
如果沒有使用範例設定來啟動 Solr,那就需要建立一個 core,這樣才能建索引、搜尋。
$ bin/solr create -c <name>
Add Documents
Solr 安裝檔包含了一些範例文件放在 example 下的子目錄裡。
bin 目錄下有一個 post script,可以用來為各種不同的文件做索引。例如:
$ bin/post -c gettingstarted example/exampledocs/*.xml
Ask Questions
搜尋包含「video」字串的文件:
http://localhost:8983/solr/gettingstarted/select?q=video
上還的 URL 包含了 host name (localhost),port number (8983),application name (solr),core 名稱 (gettingstarted),request handler (select), 以及查詢 (q=video).
傳回的結果是一個 XML 文件,包含兩個部分。
第一個部分是 responseHeader,包含關於這個 response 的資訊。
主要的是第二個部分,是在 result 標記裡,它包含一個或多個 doc 標記,它包含符合搜尋條件的文件欄位。
Solr 也可以將結果輸出為 JSON、PHP、Ruby、甚至是使用者自訂的格式。
掌握了搜尋的基本觀念之後,可以對查詢語法做一些增強。例如,這次只要 ID, name, price 這三個欄位(如果不指定要哪些欄位的話,會回傳全部):
http://localhost:8983/solr/gettingstarted/select?q=video&fl=id,name,price
Here is another example which searches for "black" in the name field only. If you do not tell Solr which field to
另一個例子,這次只在 name 欄位搜尋「black」,如果不告訴 Solr 要搜尋哪個欄位,它會搜尋 schema 裡所指定的預設欄位:
http://localhost:8983/solr/gettingstarted/select?q=name:black
搜尋條件也可以是某個範圍,例如 price 要在 0 到 400 之間:
http://localhost:8983/solr/gettingstarted/select?q=price:[0%20TO%20400]&fl=id,name,price
分面瀏覽 (Faceted browsing) 是 Solr 的關鍵功能之一。它讓使用者以一種有意義的方式來收縮搜尋的結果。
例如,一個購物網站可以用廠商或價格做為分面來收縮查詢結果。
分面資訊 (Feceting information) 會做為 Solr query response 的第三部份回傳。
例如下面這個查詢,參數增加了 facet=true 以及 facet.field=cat:
http://localhost:8983/solr/gettingstarted/select?q=price:[0%20TO%20400]&fl=id,name,price&facet=true&facet.field=cat
從 Solr 回傳的 XML 裡除了我們已經熟悉的 responseHeader 以及 response 之外,多了一個 facet_counts 元素:
<response>
<lst name="responseHeader"> ... </lst>
<result name="response" numFound="9" start="0">
<doc>
<str name="id">SOLR1000</str>
<str name="name">Solr, the Enterprise Search Server</str>
<float name="price">0.0</float>
</doc>
...
</result>
<lst name="facet_counts">
<lst name="facet_queries"/>
<lst name="facet_fields">
<lst name="cat">
<int name="electronics">6</int>
<int name="memory">3</int>
<int name="search">2</int>
<int name="software">2</int>
<int name="camera">1</int>
<int name="copier">1</int>
<int name="multifunction printer">1</int>
<int name="music">1</int>
<int name="printer">1</int>
<int name="scanner">1</int>
<int name="connector">0</int>
<int name="currency">0</int>
<int name="graphics card">0</int>
<int name="hard drive">0</int>
<int name="monitor">0</int>
</lst>
</lst>
<lst name="facet_dates"/>
<lst name="facet_ranges"/>
</lst>
</response>
Fecet information 顯示 cat 欄位的每一個可能的值各有幾筆查詢結果。
使用這個,你可以容易的讓使用者以一種快速的方式縮小查詢的範圍。
你可以增加過濾條件,例如將查詢限制在 "software" 這個類別:
http://localhost:8983/solr/gettingstarted/select?q=price:0%20TO%20400&fl=id,name,price&facet=true&facet.field=cat&fq=cat:software
Solr Start Script Reference
Starting and Stopping
Available Parameters
-m
啟動 Solr 時指定 JVM 的最小 (-Xms) 以及最大 (-Xmx) heap size,例如:
bin/solr start -m 1g
預設值是 512m.
Setting Java System Properties
bin/solr script 會將 -D 參數傳送給 JVM,這讓你可以任意設定 Java system properties。
例如,設定自動 soft-commit 頻率為3秒:
bin/solr start -Dsolr.autoSoftCommit.maxTime=3000
Collections and Cores
bin/solr script 可以用來建立新的 collection (SolrCloud mode) 或 core (standalone mode),或刪除 collections.
Create
create 命令會偵測目前 Solr 的執行模式是 standalone 還是 SolrCloud,以此來判斷要建立 core 或 collection.
bin/solr create -c myCoreName