solr
是一個用 java
寫的搜索服務器,支持分佈式集羣部署等各類特性,如今看來應該是 目前使用範圍最廣的搜索服務器了html
研究了三天,由於想直接部署成分佈式的,網上的各類教程都是太太久遠的了,繞來繞去就死在配置文件裏了java
因此先不想作分佈式的問題了,先搭一個單機版的,壓力上來了再裝zookeeper
作分佈式linux
系統爲 CentOS7apache
新建一個專門負責搜索服務的用戶search,將下載的solr二進制包放在這個用戶的家目錄中,我這裏是直接把本地壓縮包扔進了服務器中json
// 須要先創建一個專門負責搜索服務的帳戶: 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
vim
// 進入目錄
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
bash
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
複製代碼
配置環境變量oracle
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:users
和articles
bin/solr create -c users // 索引用戶
bin/solr create -c articles // 索引文章
複製代碼
// 得到外網ip
curl ip.gs
// 在瀏覽器中訪問後臺
http://ip:8983
// 服務搭建完成後要關閉外部端口,從內網中訪問
複製代碼
我第一個用的搜索服務器是 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
的基本用法.