solr6 java_Solr6 快速入门教程
Solr6 快速入門教程
安裝
環境要求
JDK1.8
下載Solr,本文試驗時,使用的Solr6.6.0
開始安裝
解壓solr-6.6.0.zip
cd solr-6.6.0\
啟動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>
訪問Solr管理可視化頁面: http://localhost:8983/solr,檢測Solr是否運行。
Solr 現在將運行兩個節點,一個在端口7574,一個在端口8983,有一個自動創建的文檔gettingstarted,默認有兩個分片收集,每個分片有兩個副本,這管理頁面的Cloud tab 可以很直觀的查看。
Solr服務器已經啟動并運行,但是它不包含任何數據。Solr安裝包括了bin/post工具,以便從一開始就方便地從Solr的文檔中獲得各種類型的文檔。
注意:當前的bin/post工具沒有一個可以比擬的Windows腳本,但是調用的底層Java程序是可用的。
學習post.jar
在windows中,bin/post可以委托給一個獨立運行的Java程序叫SimplePostTool,可以執行運行 java -jar example/exampledocs/post.jar
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|-] [ [...]]
...
...
重點在這里:
java [SystemProperties] -jar post.jar [-h|-] [ [...]]
要看懂這個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才能解析
java -jar example\exampledocs\post.jar -h查看幫助列出的內容說到:
Supported System Properties and their defaults:
-Dc=
-Durl= (overrides -Dc option if specified)
-Ddata=files|web|args|stdin (default=files)
-Dtype= (default=application/xml)
-Dhost= (default: localhost)
-Dport= (default: 8983)
-Dbasicauth= (sets Basic Authentication credentials)
-Dauto=yes|no (default=no)
-Drecursive=yes|no| (default=0)
-Ddelay= (default=0 for files, 10 for web)
-Dfiletypes=[,,...] (default=xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log)
-Dparams="=[&=...]" (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模式表示你要提交的數據在文件里
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也不一定就意味著就一定會把索引寫入磁盤,這取決于solrconfig中directory配置的實現是什么,如果配置的是RAMDirectory,就僅僅只在內存中操作了。
optimize表示是否需要對索引進行優化操作,默認為no即表示不對索引進行優化
out即OutputStream表示輸出流,這個參數作用就是,你請求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 '42'
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/
命令解析:
-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
你將會看到:
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
索引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在基于jvm的語言或其他Solr客戶端,以編程方式創建文檔發送到Solr。
使用Solr管理頁面的文檔選項卡粘貼一個要被索引的文檔,或者選擇Document Type的下拉選項卡選擇Document Builder每次添加一個字段來構建文檔.單擊表單下面的Submit文檔按鈕,以索引文檔。
數據操作
更新數據
默認情況下,schema.xml指定了一個uniqueKey字段id,即使我們索引一個內容多次,它也不會重復添加,當我們POST命令到Solr添加文檔時,如果uniqueKey字段當前值已存在,它會自動替換原來的內容.
刪除數據
可以通過將delete命令發送到更新URL并指定文檔的惟一鍵字段的值,或者匹配多個文檔的查詢(小心使用這個!)來刪除數據。
執行以下命令刪除一個特定的文檔:
linux使用:bin/post -c gettingstarted -d "SP2514N"
windows使用:java -Dc=gettingstarted -Ddata=args -jar example\exampledocs\post.jar "1"
搜索
Solr可以通過REST客戶端,cURL,wget,POSTMAN等來查詢,以及許多編程語言都可以使用的本地客戶端。
Solr管理UI包含一個查詢構建器接口——gettingstarted默認文檔查詢:http://localhost:8983/solr/#/...如果你不改變表單里的任何內容,直接點擊Execute Query按鈕,你將得到默認10條JSON格式的文檔(*:*作為q的參數表示匹配所有文檔)
由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=0,rows=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的更多信息,請查看以下參考資料:
Solr參考指南(確保您將參考指南的版本與您的Solr版本匹配)
也可以參考一些額外的資源
總結
以上是生活随笔為你收集整理的solr6 java_Solr6 快速入门教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java filereader类_Jav
- 下一篇: win7 java闪退_win7 sdk