使用solr搭建搜尋伺服器
前言
solr
是一個用 java
寫的搜尋伺服器,支援分散式叢集部署等各種特性,現在看來應該是
目前使用範圍最廣的搜尋伺服器了
研究了三天,因為想直接部署成分散式的,網上的各種教程都是太過久遠的了,繞來繞去就死在配置檔案裡了
所以先不想做分散式的問題了,先搭一個單機版的,壓力上來了再裝zookeeper
做分散式
安裝
系統為 CentOS7
-
新建一個專門負責搜尋服務的使用者search,將下載的solr二進位制包放在這個使用者的家目錄中,我這裡是直接把本地壓縮包扔進了伺服器中
// 需要先建立一個專門負責搜尋服務的賬戶: search useradd search // 在search家目錄下新建服務資料夾 mkdir /home/search/search-service // 將原生程式碼上傳到服務資料夾下 scp solr-7.4.0.zip root@testing:/home/search/search-service/ 複製程式碼
-
解壓
solr-7.4.0.zip
// 進入目錄 cd /home/search/search-service/ // 解壓縮 unzip solr-7.4.0.zip // 將服務許可權賦給search chown -R search:search /home/search/search-service/solr-7.4.0/server/ 複製程式碼
-
進入solr目錄
cd solr-7.4.0/ 複製程式碼
-
新建
/usr/java
目錄,在其中下載jdk
http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.html mkdir /usr/java // 我是從本地將jdk上傳到伺服器中 scp jdk-8u181-linux-x64.tar.gz root@testing:/usr/java/ 複製程式碼
-
解壓縮jdk包
cd /usr/java/ tar -zxvf jdk-8u181-linux-x64.tar.gz 複製程式碼
-
配置環境變數
vim /etc/profile // 在最後新增環境變數,其中根據jdk版本修改JAVA_HOME和JRE_HOME #set java environment JAVA_HOME=/usr/java/jdk1.8.0_181 JRE_HOME=/usr/java/jdk1.8.0_181/jre CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin export JAVA_HOME JRE_HOME CLASS_PATH PATH 複製程式碼
-
讓修改生效
source /etc/profile 複製程式碼
-
驗證jdk是否安裝成功
java -version // 如果有如下輸出,證明安裝成功 java version "1.8.0_181" Java(TM) SE Runtime Environment (build 1.8.0_181-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode) 複製程式碼
-
啟動solr節點
// 切換使用者 su search // 進入solr根目錄 cd /home/search/search-service/solr.7.4.0/ // 啟動節點 bin/solr start (可以使用 -p 8983 指定埠,預設是8983埠) 複製程式碼
建立core
core是搜尋的核心,可以把它理解為集合,比如我需要搜尋使用者和帖子,那麼就需要建立兩個core:users
和articles
bin/solr create -c users // 索引使用者
bin/solr create -c articles // 索引文章
複製程式碼
進入後臺進行檢視
// 獲得外網ip
curl ip.gs
// 在瀏覽器中訪問後臺
http://ip:8983
// 服務搭建完成後要關閉外部埠,從內網中訪問
複製程式碼
API
我第一個用的搜尋伺服器是 xunsearch
,需要做很多配置,我以為搜素軟體都這樣...233
但是實際上solr
不需要這麼麻煩,如果僅僅是單機版,簡單的搜尋配置完全可以使用http
請求來設定
我們假設solr
的後臺地址為: http://localhost:8983/solr
core
名為 my_collection
-
新增索引
-
新增單個
curl -X POST -H 'Content-Type: application/json' 'http://localhost:8983/solr/my_collection/update/json/docs' --data-binary ' { "id": "1", "title": "Doc 1" }' 複製程式碼
-
新增多個
curl -X POST -H 'Content-Type: application/json' 'http://localhost:8983/solr/my_collection/update' --data-binary ' [ { "id": "1", "title": "Doc 1" }, { "id": "2", "title": "Doc 2" } ]' 複製程式碼
- 要注意,僅僅新增後是無法搜尋到文件的,還需要
commit
才可以
-
-
更新索引
curl -X POST -H 'Content-Type: application/json' 'http://localhost:8983/solr/my_collection/update' --data-binary ' { "add": { "doc": { "id": "DOC1", "my_field": 2.3, "my_multivalued_field": [ "aaa", "bbb" ] } }, "add": { "commitWithin": 5000, "overwrite": false, "doc": { "f1": "v1", "f1": "v2" } }, "commit": {}, "optimize": { "waitSearcher":false }, "delete": { "id":"ID" }, "delete": { "query":"QUERY" } }' 複製程式碼
可以看到,新增、commit刪除等操作,都可以通過1次http請求來設定
-
查詢
查詢的路徑為 http://{$url}/select?q=xxx&sort=xxx&start=xxx&rows=xxx
引數q為查詢主體,sort為排序方式,rows為查詢行數,start為查詢起始位置
例如users
表中有 name
欄位,
-
我們需要查詢
name
為silsuer
的使用者那麼 引數
q=name:silsuer
-
並且按照建立時間倒序查詢
引數
q=name:silsuer&sort=created_at desc
-
每頁查出10條資料,並且本次查第二頁
引數start的計算方式為:
start=num*(page-1) -> start=10*(2-1)=10
引數為:
q=name:silsuer&sort=created_at desc&start=10&rows=10
-
注意:上面的引數中的空格冒號之類的,需要url編碼後使用
以上就是solr
的基本用法.