Solr6 快速入門教程

Solr6 快速入門教程

安裝

環境要求

  1. JDK1.8
  2. 下載Solr,本文試驗時,使用的Solr6.6.0

開始安裝

  1. 解壓solr-6.6.0.zip
  2. cd solr-6.6.0\
  3. 啓動solr,run: bin\solr start -e cloud -noprompt
D:\machine\solr\solr-6.6.0>bin\solr start -e cloud -noprompt

Welcome to the SolrCloud example!

Starting up 2 Solr nodes for your example SolrCloud cluster.
...

Started Solr server on port 8983. Happy searching!
...

Started Solr server on port 7574. Happy searching!
...

SolrCloud example running, please visit: http://localhost:8983/solr


D:\machine\solr\solr-6.6.0>
  1. 訪問Solr管理可視化頁面: http://localhost:8983/solr,檢測Solr是否運行。

Solr 如今將運行兩個節點,一個在端口7574,一個在端口8983,有一個自動建立的文檔gettingstarted,默認有兩個分片收集,每一個分片有兩個副本,這管理頁面的Cloud tab 能夠很直觀的查看。html

clipboard.png

Solr服務器已經啓動並運行,可是它不包含任何數據。Solr安裝包括了bin/post工具,以便從一開始就方便地從Solr的文檔中得到各類類型的文檔。java

  • 注意:當前的bin/post工具沒有一個能夠比擬的Windows腳本,可是調用的底層Java程序是可用的。

學習post.jar

在windows中,bin/post能夠委託給一個獨立運行的Java程序叫SimplePostTool,能夠執行運行 java -jar example/exampledocs/post.jarnode

  • D:\machine\solr\solr-6.6.0>java -jar example\exampledocs\post.jar -h查看幫助能夠(獲取文件,遞歸到一個網站或文件系統文件夾,或者向Solr服務器發送直接命令)
SimplePostTool version 5.0.0
Usage: java [SystemProperties] -jar post.jar [-h|-] [<file|folder|url|arg> [<file|folder|url|arg>...]]
...
...

重點在這裏:
java [SystemProperties] -jar post.jar [-h|-] [<file|folder|url|arg> [<file|folder|url|arg>...]]linux

  • 要看懂這個post.jar,首先要知道,被中括號包住的參數表示可選參數,|表示或者,SystemProperties表示系統屬性;
    什麼叫系統屬性呢?即經過System.setProperty(key,value)設置的參數;

這裏的key,value值都是隨便定義的,沒什麼特別要求,這樣你隨後經過System.getProperty(key)經過key就能在任意時刻獲取到該key對應的參數值,若是是在dos命令行下,你也能夠經過java -Dkey=value這種方式指定,至此java [SystemProperties]這部分你應該理解了,至於後面的-jar是java命令的參數,即執行一個jar文件,-jar後面指定一個jar包路徑,默認是相對於當前所在路徑,-h即表示添加了這個即會打印命令提示信息,就比如你敲java -h是相似的,後面的file,folder,url,args分別表示你要提交的數據的幾種不一樣表示形式,file即表示你要提交的數據是存在於文件中,而folder即表示你要提交的存在於文件夾中,url即表示你要提交的數據是存在於互聯網上的一個URL地址表示的資源,它多是一個HTML頁面,多是一個PDF文件,多是一個圖片等等,args即表示你要提交的數據直接在命令行敲出來,但arges並非隨隨便便一個字符串就行的,它須要有固定的格式,solr才能解析web

  • java -jar example\exampledocs\post.jar -h查看幫助列出的內容說到:
Supported System Properties and their defaults:
  -Dc=<core/collection>
  -Durl=<base Solr update URL> (overrides -Dc option if specified)
  -Ddata=files|web|args|stdin (default=files)
  -Dtype=<content-type> (default=application/xml)
  -Dhost=<host> (default: localhost)
  -Dport=<port> (default: 8983)
  -Dbasicauth=<user:pass> (sets Basic Authentication credentials)
  -Dauto=yes|no (default=no)
  -Drecursive=yes|no|<depth> (default=0)
  -Ddelay=<seconds> (default=0 for files, 10 for web)
  -Dfiletypes=<type>[,<type>,...] (default=xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log)
  -Dparams="<key>=<value>[&<key>=<value>...]" (values must be URL-encoded)
  -Dcommit=yes|no (default=yes)
  -Doptimize=yes|no (default=no)
  -Dout=yes|no (default=no)
  • -D是命令行下指定系統屬性的固定前綴數據庫

    • c表示collection名稱,你須要對solr admin裏的哪一個collection進行索引數據添加/修改/刪除
    • url表示solr admin後臺索引更新的請求URL,這個URL是固定的,通常格式是http://host:port/solr/${collectionName}/update,這裏的${collectionName}和上面的c屬性值保持一致
    • data表示你要提交數據的幾種模式,files模式表示你要提交的數據在文件裏apache

      • web表示你要提交的數據在互聯網上的一個URL表示的資源文件裏
      • args表示你要提交的數據你會直接在post.jar命令後面直接輸入
      • stdin表示你要提交的數據須要在dos命令行下經過System.in輸入流臨時接收,跟args有點相似,但不一樣的是,stdin模式下,post.jar後面不須要指定任何參數,直接回車便可,而後程序會等待用戶輸入,用戶輸入完畢再回車,post.jar會接收到用戶輸入,post.jar從新被喚醒繼續執行。而args是直接在post.jar後面輸入參數,沒有一箇中斷過程,而stdin模式下若是用戶一直沒有輸入,那post.jar就會一直阻塞在那裏等待用戶輸入爲止。
    • type表示你要提交數據的MIME類型,默認是application/xml即默認會看成是XML來處理
    • host表示你要連接的SOlr Admin部署服務器的主機名或者IP地址,默認是localhost
    • port表示你要連接的Solr Admin部署的Web容器監聽的端口號,默認post.jar裏設置爲8983port具體值取決於你實際部署環境而定
    • auto表示是否自動猜想文件類型
    • recursive表示是否遞歸,這裏遞歸有兩種狀況,好比你data=folder即表示是否遞歸查找文件夾下的全部文件,如data=web即表示是否遞歸抓取URL,設置爲no即表示不遞歸操做,設置爲一個數字,即表示遞歸深度
    • delay:這裏的時間延遲也分兩種,若是你post的是file,那麼每一個file的post間隔爲0,即不作延遲處理而若是你是post的是網絡上的一個url資源,由於須要受到對方服務器的訪問限制,因此必需要作一個抓取頻率限制即每抓一個睡眠一下子,不然抓取太快太頻率容易被對方封IP。
    • filetypes表示post.jar支持提交哪些文件類型,後面有列出默認支持的文件類型,若是你想覆蓋默認值,那麼請指定此參數
    • params表示須要追加到Solr Admin的請求URL後面的請求參數如id=1&name=yida之類的
    • commit表示是否提交到solr admin後臺進行索引寫入,設置爲false表示不提交至sor admin,但設置爲true也不必定就意味着就必定會把索引寫入磁盤,這取決於solrconfigdirectory配置的實現是什麼,若是配置的是RAMDirectory,就僅僅只在內存中操做了。
    • optimize表示是否須要對索引進行優化操做,默認爲no即表示不對索引進行優化
    • outOutputStream表示輸出流,這個參數做用就是,你請求Solr Admin添加索引數據,Solr Admin後臺會返回數據給你,Solr Admin後臺返回的數據你拿什麼輸出流來接收,默認是System.out即表示把後臺返回的信息輸出打印到控制檯
  • 參數這裏應該已經搞得清楚了,再來看看官方提供的幾個post.jar使用命令示例:
Examples:
  java -Dc=gettingstarted -jar post.jar *.xml
  java -Ddata=args -Dc=gettingstarted -jar post.jar '<delete><id>42</id></delete>'
  java -Ddata=stdin -Dc=gettingstarted -jar post.jar < hd.xml
  java -Ddata=web -Dc=gettingstarted -jar post.jar http://example.com/
  java -Dtype=text/csv -Dc=gettingstarted -jar post.jar *.csv
  java -Dtype=application/json -Dc=gettingstarted -jar post.jar *.json
  java -Durl=http://localhost:8983/solr/techproducts/update/extract -Dparams=literal.id=pdf1 -jar post.jar solr-word.pdf
  java -Dauto -Dc=gettingstarted -jar post.jar *
  java -Dauto -Dc=gettingstarted -Drecursive -jar post.jar afolder
  java -Dauto -Dc=gettingstarted -Dfiletypes=ppt,html -jar post.jar afolder

更多關於post.jar的信息請點擊這裏

創建索引

索引一個包含多種文件的目錄

  • bin/post能夠循環提取文件目錄,將每一個文件的原始內容發送到Solr以提取和索引

Solr安裝後,包括一個docs/子目錄,windows下使用以下命令:java -Dc=gettingstarted -Dauto=yes -Ddata=files -Drecursive=yes -jar example/exampledocs/post.jar docs/編程

linux下可使用bin/post -c gettingstarted docs/
命令解析:json

  • -c gettingstarted:要索引的集合的名稱
  • docs/: Solr安裝目錄下的/docs的相對路徑

Solr索引XML

使用bin/post,索引示例Solr XML文件中的示例/example文檔/:
linux下使用:bin/post -c gettingstarted example/exampledocs/*.xml
windows下使用:
java -Dc=gettingstarted -Dauto=yes -Ddata=files -Drecursive=yes -jar example/exampledocs/post.jar example\exampledocs\*.xml
你將會看到:windows

D:\machine\solr\solr-6.6.0>java -Dc=gettingstarted -Dauto=yes -Ddata=files -Drecursive=yes -jar example/exampledocs/post.jar example\exampledocs\*.xml
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/gettingstarted/update...
Entering auto mode. File endings considered are xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log
Entering recursive mode, max depth=999, delay=0s
POSTing file gb18030-example.xml (application/xml) to [base]
POSTing file hd.xml (application/xml) to [base]
POSTing file ipod_other.xml (application/xml) to [base]
POSTing file ipod_video.xml (application/xml) to [base]
POSTing file manufacturers.xml (application/xml) to [base]
POSTing file mem.xml (application/xml) to [base]
POSTing file money.xml (application/xml) to [base]
POSTing file monitor.xml (application/xml) to [base]
POSTing file monitor2.xml (application/xml) to [base]
POSTing file mp500.xml (application/xml) to [base]
POSTing file sd500.xml (application/xml) to [base]
POSTing file solr.xml (application/xml) to [base]
POSTing file utf8-example.xml (application/xml) to [base]
POSTing file vidcard.xml (application/xml) to [base]
14 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/gettingstarted/update...
Time spent: 0:00:03.233

注意:您能夠瀏覽文檔索引在http://localhost:8983/solr/ge...

索引JSON

  • Solr支持索引JSON,即任意結構化JSON或「Solr JSON」(相似於Solr XML)
  • Solr包含一個很小的示例Solr JSON文件,以演示該功能。再次使用bin/post,索引示例JSON文件:

linux使用: bin/post -c gettingstarted example/exampledocs/books.json
windows使用:java -Dc=gettingstarted -Dauto=yes -Ddata=files -Drecursive=yes -jar example/exampledocs/post.jar example\exampledocs\books.json

你將看到以下信息:

D:\machine\solr\solr-6.6.0>java -Dc=gettingstarted -Dauto=yes -Ddata=files -Drecursive=yes -jar example/exampledocs/post.jar example\exampledocs\books.json
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/gettingstarted/update...
Entering auto mode. File endings considered are xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log
Entering recursive mode, max depth=999, delay=0s
POSTing file books.json (application/json) to [base]/json/docs
1 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/gettingstarted/update...
Time spent: 0:00:01.211
  • 要了解關於索引Solr JSON的更多信息,請參閱Solr參考指南部分Solr-Style JSON

索引CSV

  • 數據到Solr的一個重要通道是經過CSV,尤爲是當文檔是均勻的,全部的記錄都有相同的字段。CSV能夠方便地從電子表格中導出,例如Excel,或者從MySQL等數據庫導出。在開始使用Solr時,一般最容易將結構化數據轉換爲CSV格式,而後將其索引到Solr,而不是一個更復雜的單步操做。
  • 使用bin/post索引包含的示例CSV文件:

linux下使用:bin/post -c gettingstarted example/exampledocs/books.csv
windows下使用:java -Dc=gettingstarted -Dauto=yes -Ddata=files -Drecursive=yes -jar example/exampledocs/post.jar example\exampledocs\books.csv

在你的終端,你會看到:

D:\machine\solr\solr-6.6.0>java -Dc=gettingstarted -Dauto=yes -Ddata=files -Drecursive=yes -jar example/exampledocs/post.jar example\exampledocs\books.csv
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/gettingstarted/update...
Entering auto mode. File endings considered are xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log
Entering recursive mode, max depth=999, delay=0s
POSTing file books.csv (text/csv) to [base]
1 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/gettingstarted/update...
Time spent: 0:00:00.874

更多信息,請參閱Solr指南部分CSV格式的索引更新CSV Formatted Index Updates

其餘索引技術

  • 使用數據導入處理程序(DIH)從數據庫中導入記錄。
  • 使用Solr在基於jvm的語言或其餘Solr客戶端,以編程方式建立文檔發送到Solr。
  • 使用Solr管理頁面的文檔選項卡粘貼一個要被索引的文檔,或者選擇Document Type的下拉選項卡選擇Document Builder每次添加一個字段來構建文檔.單擊表單下面的Submit文檔按鈕,以索引文檔。

數據操做

更新數據

  • 默認狀況下,schema.xml指定了一個uniqueKey字段id,即便咱們索引一個內容屢次,它也不會重複添加,當咱們POST命令到Solr添加文檔時,若是uniqueKey字段當前值已存在,它會自動替換原來的內容.

刪除數據

  • 能夠經過將delete命令發送到更新URL並指定文檔的唯一鍵字段的值,或者匹配多個文檔的查詢(當心使用這個!)來刪除數據。
  • 執行如下命令刪除一個特定的文檔:

linux使用:bin/post -c gettingstarted -d "<delete><id>SP2514N</id></delete>"
windows使用:java -Dc=gettingstarted -Ddata=args -jar example\exampledocs\post.jar "<delete><id>1</id></delete>"

搜索

Solr能夠經過REST客戶端,cURL,wget,POSTMAN等來查詢,以及許多編程語言均可以使用的本地客戶端。

  • Solr管理UI包含一個查詢構建器接口——gettingstarted默認文檔查詢:http://localhost:8983/solr/#/...若是你不改變表單裏的任何內容,直接點擊Execute Query按鈕,你將獲得默認10條JSON格式的文檔(*:*做爲q的參數表示匹配全部文檔)

clipboard.png

由Admin UI發送到Solr的URL顯示在上面屏幕右上角的淺灰色中,若是你點擊它,你的瀏覽器將會顯示原始的響應。要使用cURL,請在cURL命令行中使用相同的URL:

curl "http://localhost:8983/solr/gettingstarted/select?indent=on&q=*:*&wt=json"

基礎

搜索一個詞

搜索一個特定的詞,須要把在Solr Admin UI查詢板塊中q的參數值*:*替換成你想要查詢的詞

curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=foundation"

你將獲得:

$ curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=foundation"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2017  100  2017    0     0   123k      0 --:--:-- --:--:-- --:--:--  123k{
  "responseHeader":{
    "zkConnected":true,
    "status":0,
    "QTime":17,
    "params":{
      "q":"foundation",
      "indent":"true",
      "wt":"json"}},
  "response":{"numFound":3,"start":0,"maxScore":3.4038174,"docs":[
      {
        "id":"0553293354",
        "cat":["book"],
        "name":["Foundation"],
        "price":[7.99],
        "inStock":[true],
        "author":["Isaac Asimov"],
        "series_t":["Foundation Novels"],
        "sequence_i":1,
        "genre_s":"scifi",
        "_version_":1576664844219711488},
      {
...

響應代表,有3個命中("numFound":3),其中前10個被返回,由於默認的start=0rows=10。您能夠經過指定這些params查詢結果,其中start是第一個結果返回的(基於零的)位置,而raws是一頁的大小。

  • 要限制響應中返回的字段,請使用fl param,該命令將使用逗號分隔的字段名列表。只返回id字段:
curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=foundation&fl=id"
  • q=foundation匹配了咱們已經索引的幾乎全部文檔,由於文檔中的大多數文件都包含「Apache軟件基金會」。要限制搜索到特定字段,使用語法"q=field:value",例如只在name字段中搜索Foundation:
curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=name:Foundation"

短語檢索

要搜索一個多詞短語,用雙引號括起來:q="這裏的多個詞語"。例如,搜索"CAS latency"注意,術語之間的空格必須轉換爲"+"(Admin UI將自動處理URL編碼):

curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=\"CAS+latency\""

你將看到:

"responseHeader":{
    "zkConnected":true,
    "status":0,
    "QTime":9,
    "params":{
      "q":"\"CAS latency\"",
      "indent":"true",
      "wt":"json"}},
  "response":{"numFound":2,"start":0,"maxScore":2.9027793,"docs":[
      {
        "id":"TWINX2048-3200PRO",
        "name":["CORSAIR  XMS 2GB (2 x 1GB) 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) Dual Channel Kit System Memory - Retail"],
        "manu":["Corsair Microsystems Inc."],
        "manu_id_s":"corsair",
        "cat":["electronics",
          "memory"],
        "features":["CAS latency 2,  2-3-3-6 timing, 2.75v, unbuffered, heat-spreader"],
...

組合搜索

默認狀況下,當你在單一查詢中搜索多個詞或短語時,Solr只要求其中一個匹配,以便讓文件匹配,包含更多詞語的文檔將在結果列表中排序更高。

  • 你能夠查詢一個詞經過前綴加上"+"來限定;相反,爲了避免容許出現一個詞,用"-"前綴來限定。
  • 由於"+"字符在url中有一個保留的目的(空格字符編碼),因此必須使用URL encode進行編碼在curl中使用.
curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=on&q=%2Baaa+%2BFoundatio"
  • 查找含有"Foundation"可是不含有"aaa"的文檔,在Admin UI 的查找頁面的q參數中輸入+Foundation -one,在curl中將"+"編碼爲"%2B"
$ curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=on&q=%2BFoundation+-aaa"

深刻學習:要了解更多Solr搜索選項,請參閱Solr參考指南的搜索部分

清除

  • 當你在完成了上面示例後,你可能想要阻止Solr,並把環境從新設定到起點。下面的命令行將中止Solr並刪除開始腳本建立的兩個節點的目錄:
bin/solr stop -all ; rm -Rf example/cloud/

接下來去哪裏?

  • 有關Solr的更多信息,請查看如下參考資料:

相關文章
相關標籤/搜索