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