Solr專題(一)手把手教你搭建Solr服務
一、Solr是什麼,能解決什麼問題?
Solr是一個高效能,採用Java開發,基於Lucene的全文搜尋伺服器。同時對其進行了擴充套件,提供了比Lucene更為豐富的查詢語言,同時實現了可配置、可擴充套件並對查詢效能進行了優化,並且提供了一個完善的功能管理介面,是一款非常優秀的全文搜尋引擎。
簡而言之就是在專案中可以作為搜尋引擎,提供資源的高效查詢。
Q:資料庫不是能提供查詢的介面嗎?為什麼要用額外的框架來做?
A:因為模糊查詢不能使用資料庫的索引,所以資料庫提供的模糊查詢效率很低。而Solr本身也可以看做是資料庫(no sql)類似於MongoDB存文件資料的菲關係型資料庫。許多大型網站的搜尋引擎絕不是通過查詢資料庫來做的,而是由Solr、Elasticsearch 這樣的全文檢索框架來負責。
二、同類型產品比較
全文檢索框架還有ElasticSearch,它們兩者之間的區別如下:
- Solr 利用 Zookeeper 進行分散式管理,而 Elasticsearch 自身帶有分散式協調管理功能;
- Solr 支援更多格式的資料,而 Elasticsearch 僅支援json檔案格式;
- Solr 官方提供的功能更多,而 Elasticsearch 本身更注重於核心功能,高階功能多有第三方外掛提供;
- Solr 在傳統的搜尋應用中表現好於 Elasticsearch,但在處理實時搜尋應用時效率明顯低於 Elasticsearch。
- Solr 是傳統搜尋應用的有力解決方案,但 Elasticsearch 更適用於新興的實時搜尋應用。
三、搭建服務
本例中Solr版本為7.7.2
1.下載Solr
官方下載網站:https://lucene.apache.org/solr/downloads.html
2.版本變更記錄
參考博文: https://blog.csdn.net/jiangchao858/article/details/52443745
說明:Solr從5.0.0開始內嵌jetty伺服器,可直接啟動,之前版本需依賴外部容器(tomcat、jetty...)中啟動。
3.安裝與啟動
免安裝,下載解壓即用。
常用命令:
- 啟動:solr start
- 停止:solr stop -p 8983
- 重啟:solrrestart
啟動方式:找到bin目錄,在位址列輸入cmd,開啟命令介面
輸入solr start,使用預設埠啟用jetty服務。
在瀏覽器輸入localhost:8983/solr檢視效果
4、建立core
core就相當於資料庫中的表,用來存放資料。
在/server/solr下新建一個資料夾,資料夾的名稱就是core的名稱,再將/server/solr/configsets/sample_techproducts_configs中的conf資料夾複製到新建的資料夾下。
完成後重啟solr服務,再進入solr的admin介面進行新增Core
新增成功後,資料夾裡會多出兩個檔案(data、core.properties)
進入自己建立的core進行管理:
至此,Solr服務的搭建已經成功了,接下來是運用教程。
5、匯入資料
是指將資料庫裡面的資料匯入到Solr中。
首先匯入需要的jar包,將dist下的兩個jar包複製到/server/solr-webapp/webapp/WEB-INF/lib資料夾下
在你自己的core裡的conf下新建一個data-config.xml的配置檔案。
<?xml version="1.0" encoding="UTF-8" ?> <dataConfig> <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=utf-8" user="root" password="root"/> <document name="SysUser"> <entity name="SysUser" pk="id" query='SELECT id,name,age FROM sys_suer' deltaImportQuery='SELECT id,name,age FROM sys_user WHERE id = "${dataimporter.delta.id}"' deltaQuery="SELECT id FROM sys_user where create_date > '${dataimporter.last_index_time}'" > <field column="id" name="id"/> <field column="name" name="name"/> <field column="age" name="age"/> </entity> </document> </dataConfig>
- dataSource表示連線資料庫的配置
- document表示文件資訊
- entity表示實體資訊
- --query表示全量匯入時呼叫的sql語句
- --deltaImportQuery表示增量匯入時呼叫的sql語句
- --deltaQuery表示增量匯入時查出來的資料
- --field表示欄位
- --column表示資料庫中欄位名稱
- --name表示存在solr的core中的名稱
- ${dataimporter.last_index_time}表示最後一次匯入資料的時間
具體流程:選擇全量匯入(全部資料匯入)時呼叫query查詢資料並匯入到Solr中。選擇增量匯入時,先執行deltaQuery語句獲得需要匯入資料的id,再根據deltaImportQuery查出資料並匯入到Solr中。
編輯你Core下的conf/managed-schema檔案:
- indexed表示是否被索引,即是否被查詢使用。
- stored表示是否存到Solr庫。
- type表示搜尋型別,當前為string型別的搜尋,還可以自己配置,如IK中文分詞器。
編輯core下conf/solrconfig.xml
新增以下內容
<!-- dataimport --> <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler>
配好之後重啟solr服務,並進入admin介面
只有點選重新整理狀態按鈕,才回重新整理顯示狀態,出現Indexing completed則為匯入完成。
6、查詢資料
輸入查詢條件,點選執行查詢,即可感受到全文檢索的魅力。
下一節將會對Solr Query進行一個詳細的講解。