1. 程式人生 > 實用技巧 >Solr專題(一)手把手教你搭建Solr服務

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&amp;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進行一個詳細的講解。