一、前言
前面已經學習了Lucene的分詞、索引詳解、搜索詳解的知識,已經知道開發一個搜索引擎的流程了。現在就會有這樣的一個問題:如果其他的系統也需要使用開發的搜索引擎怎么辦呢?這個時候就需要把開發的搜索引擎封裝成一個組件或者獨立成一個單獨的服務給其他系統使用了。目前市面上已經有基於Lucene的成熟的穩定的搜索引擎服務,例如Solr和ElasticSearch,如果沒有特殊需求我們就可以直接拿過來使用,不需要自己再取開發一套了。下面我們就來介紹一下Solr。
二、Solr介紹
1. Solr是什么
基於Lucene的流行、高性能的開源企業級搜索平台。Lucene下的子項目。 官網鏈接: https://lucene.apache.org/solr
2. Solr的用途
獨立地提供全文搜索服務
3. Solr的特性
3.1、獨立的企業級搜索服務,基於http以類-REST API 對外提供服務
你可以通過http協議將文檔以JSON/XML/CSV/binary格式發送給Solr進行索引。
你通過http GET 請求進行查詢,可返回JSON/XML/CSV/binary格式的搜索結果。
3.2、近實時的索引能力
文檔數據提交索引后,立馬就可看到。
3.3、先進的全文檢索能力
基於Lucene的強大搜索能力,支持任意數據類型的短語、通配、連接、分組等等查詢
3.4、綜合的管理界面
Slor內建了綜合的管理用戶界面,讓你方便的管理你的solr實例
3.5、通過簡單的配置方式來提供高靈活性、適用性
3.6、高伸縮和容錯能力
基於zookeeper,solr支持分布式、備份、再平衡,來提供高伸縮和容錯能力
3.7、插件體系架構,易擴展
Solr發布了許多定義良好的擴展點,這使得插件很容易插入索引和查詢時的過程中。
三、Solr應用架構
要在系統中使用Solr只需完成以下三個步驟即可:
1、在solr中定義一個schema(模式),來告訴solr你要索引的文檔document由哪些Field構成。
2、將需要讓用戶搜索的文檔發送給solr
3、在你的應用中公開搜索功能。應用的搜索功能通過調用Solr的搜索API實現。
四、Solr安裝、使用
1. Solr 下載
從官網下載最新版本http://mirrors.hust.edu.cn/apache/lucene/solr/7.3.0/
這里下載的windows版本的
2. 系統環境要求
JDK1.8
操作系統:Linux, MacOS/OS X, and Microsoft Windows
3. 安裝准備
Solr的安裝很簡單,只需解壓到安裝目錄。但在安裝之前針對你的使用環境:開發、測試、生產,需要進行一個評估,來決定是在獨立的機器上部署單應用服務; 還是需要分布式集群。
特別是在生產環境部署時,需認真評估需要的服務規模。考量因素:
文檔的數量、結構
要存儲的字段數量
用戶數量
影響硬件規模的因素
Lucene的嚴格限制: 單個索引中的最大文檔數: 約2.14 billion documents (約21.4億,2,147,483,647 )
實際中不可能在單個索引中達到這個文檔數量級還運行良好,在到達這個數量之前早就會用分布式索引集群。如果在部署時,就能估計出將達到如此量級,就應該用solrCloud分布式集群方式安裝。
4. 安裝
將安裝包解壓到安裝目錄即可。
Linux系統下解壓命令: tar zxf solr-7.3.0.tgz
Solr目錄說明:
5. 獨立服務器模式啟動Solr
Linux: bin/solr start
Windows: bin\solr.cmd start
默認端口: 8983
查看Solr是否在運行的命令: bin/solr status
6. solr的相關命令
在命令行下,直接 solr.cmd 回車,查看命令的使用幫助說明
輸入 solr.cmd start –help 詳細了解它的選項
7. Solr 管理控制台介紹
http://localhost:8983/solr/
8. Solr core 介紹
內核:是運行在Solr服務器中的具體唯一命名的、可管理和可配置的索引。
一台solr服務器可以托管一個或多個內核。
疑問:內核就是索引,為什么需要多個內核?
答案:不同的文檔擁有不同的模式(字段構成、索引、存儲方式),如商品數據和新聞數據就有不同的字段構成以及不同的字段索引、存儲方式。就需要分別用兩個內核來索引、存儲它們。
內核的典型用途:區分不同模式的文檔
9. 創建內核
方式一:web管理控制台加載已存在的內核
方式二:命令行命令創建一個新的內核
-d 選項可選值有兩個:
_default 默認值,最少配置;
sample_techproducts_cnofigs 示例的配置
分別用它們創建一個內核:
solr.cmd create_core –c mycore
solr.cmd create_core -c techproducts –d sample_techproducts_configs
10. 在web管理控制台查看創建的內核
核心有了,但它是空的,搞點數據進去,來試試搜索吧
在solr的example目錄下有不少示例數據。把它們搞進去:
用post命令:
Linux/Mac solr-7.3.0:$ bin/post -c techproducts example/exampledocs/*
Windows solr-7.3.0> java -jar -Dc=techproducts -Dauto example\exampledocs\post.jar example\exampledocs\*
請注意看它的輸出信息!然后到web管理控制台,看下 techproducts核心有多少個文檔。試試搜索!
11. 在左側菜單切換搜索試一下
12. 提交一個文檔
{ "id" : "2010-010154888", "cat" : ["book","paperback"], "name" : "I love solr", "author" : "leeSmall", "sequence_i" : 1, "genre_s" : "IT", "inStock" : true, "price" : 130.50, "pages_i" : 475 }
14. 我們的系統如何使用Solr?
通過http請求向solr提交查詢數據