一、安裝
1.1 安裝jdk
solr是基於lucene而lucene是java寫的,所以solr需要jdk----當前安裝的solr-7.5需要jdk-1.8及以上版本,下載安裝jdk並設置JAVA_HOME即可。
jdk下載地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
1.2 安裝solr
下載solr,然后解壓即可,windows和linux都可以下.tgz(.tgz本質是.tar.gz)和.zip解壓出來都一樣的。
solr下載地址:http://lucene.apache.org/solr/downloads.html
要注意圖中的鏈接是下載頁面的鏈接並不是solr文件的鏈接,直接wget鏈接就報gzip: solr-7.5.0.tgz: not in gzip format或End-of-central-directory signature not found.了。
1.3 設置系統資源限制
設置最大進程數t和打開文件數為65000(可能其他一些資源也要修改但我安裝時沒見有其他問題,文檔也沒看到專門說明)
ulimit -u 65000
ulimit -n 65000
二、solr基本用法
對於沒用過的新手而言,首先最關心的是怎么運行起來看這東西長什么樣其他什么高級用法后而再說,這里我們就來做這件事。
2.1 啟停
進入解壓后文件的bin目錄,執行:
# 啟動 ./solr start # 停止 ./solr stop
solr默認拒絕以root身份啟動,root加-force選項可以啟動,但后續進行操作(如創建核心等)還是會有問題,推薦使用普通用戶動。
啟動完成后默認監聽8983端口,訪問可見界面如下
2.2 solr核心(core)創建與刪除
在上面啟動起來的頁面可以看到solr就是就是這么一個界面簡陋的東西----頁面簡單(沒幾個頁面)加布局丑陋。
solr中一個核心(core)相當於一個搜索引擎,然后上傳文件時也是上傳到指定核心;solr可以建立多個solr。solr默認沒有core,我們先來創建一個core。
通過命令創建和刪除core:
# 創建core,-c指定創建的core名 ./solr create -c test_core1 # 刪除core,-c指定刪除的core名 ./solr delete -c test_core1
完成后回刷新solr界面,點擊下拉“Core Selector”即可看到剛才建立的core,選擇core即可進入core的管理界面,如下圖。
2.3 上傳文件創建索引
上一步相當於我們的搜索引擎系統創建完閉,但此是搜索引擎中是沒有內容的,我們這里就給它上傳文件。以example/exampledocs下文件為例
./post -c test_core1 ../example/example
2.4 查詢
完成后切換到Query頁面,直接點擊”Execute Query“按鈕,在右側即出現一些已建立的索引
查詢頁面各參數說明如下:
參數 | 描述 |
---|---|
q | 這是Apache Solr的主要查詢參數,只輸入值有時不能搜索,使用鍵值形式最穩妥 |
fq | 這個參數表示Apache Solr的過濾器查詢,將結果集限制為與此過濾器匹配的文檔。 |
start | start 參數表示頁面的起始偏移量,此參數的默認值為0 。 |
rows | 這個參數表示每頁要檢索的文檔的數量。此參數的默認值為10 。 |
sort | 這個參數指定由逗號分隔的字段列表,根據該列表對查詢的結果進行排序。 |
fl | 這個參數為結果集中的每個文檔指定返回的字段列表。 |
wt | 這個參數表示要查看響應結果的寫入程序的類型。 |
2.4 solr有什么用
經常聽說solr是一個全文搜索引擎,效果類似百度、谷歌。我對這句話的理解是我們可以向slor傳一個文檔它就會對文檔進行分詞,然后對每個詞建立索引,然后我們搜索某個詞就會出現所有出現過這個詞的位置。
然而正如大多數it概念都是炒作認識其本質會大失所望一樣,solr的”全文索引“和”類似百度“也是個炒作的概念(如果我沒理解錯的話)。
2.4.1 solr不支持非結構化數據
我們看到solr聲稱支持”xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log“等一堆格式,但其所謂的支持並不是我們認為中的”讀取文件/分詞/和索引“,只是支持把文件傳上去然后給文件名建個索引----那我覺得solr完全可以直接聲稱自己支持所有文件格式。
上傳的文件中有個sample.html文件,我們輸入html查找一下,返回結果如下。相當於就是一個文件(屬性)的索引,html文件內容的索引?對不起那里沒有的。(這就是所謂的支持html?)
2.4.2 solr只支持固定格式的結構化數據
solr雖然不支持html/txt/pdf等非結構化文件內容的索引,但如果支持xml/json等結構化文件也還行啦。
不好意思我們上傳了的xml/json文件內容確實是建立了索引,但是其格式得固定的。
上圖id為978-1423103349的索引在solr web頁面返回結果如下,就相當原樣輸出。
總的就是說需要明確給出id值,而且所有索引域都是自己都是起好名字,然后設定好值。
2.4.3 solr用在哪里
當然txt等非結構化文件也不是完全沒可能導入,比如采用這種方法將txt文件以行為單位進行切割,然后為給每行生成一個id這樣改造成結構化后就能導入了。
但這種還是將非結構化轉成結構化,非結構化還是無法直接導入;所以solr根本不是百度而是個數據庫(比如mysql或者更像NoSQL),百度就不要再想了。
solr的的使用一是使用代碼將結構化數據轉為結構化數據后導入數據,二是從數據導入數據。但solr就像個數據庫那為什么不直接用數據庫呢,何必新弄出個東西?solr可以和hadoop配合?hive不更好能和haddop配合嗎?所以,我現在也不是很懂solr有什么意義。
在日志監測系統ELK中,Logstash負責讀取和格式化(結構化)各種數據發送給ElasticSearch,ElasticSearch就和solr是一樣的東西,而kibana從ElasticSearch讀取數據進行展示。
參考:
http://lucene.apache.org/solr/guide/7_5/solr-tutorial.html#solr-tutorial