使用 Solr 構建企業級搜索服務器


最近因項目需要一個全文搜索引擎服務, 在考察了Lucene及Solr后,我們選擇了Solr. 本文簡要記錄了基於Solr搭建一個企業搜索服務器的過程.網上的資料太多千篇一律,也可能版本不同,總之在參照的時候並不順利,因此在通過官網的介紹並逐步實踐的基礎上,我們整理了這個文檔,希望能幫助到有類似需求的大家.

    1. Solr 介紹
      1. Solr 是一個基於Lucene技術的企業級搜索應用服務器, 運行在JVM環境中, 對外以類似webservice http模式提供接口.可簡單的通過配置的形式實現一個企業級的搜索服務.
    2. 安裝與部署
      1. JDK環境配置
        安裝配置jdk, 並設置 JAVA_HOME 環境變量,
        ps: 樓主最開始使用的是1.8的版本, 也挺正常, 但后面因為在嘗試導入sqlserver 2014數據庫數據的時候,可能是樓主下載的mssql-jdbc.jar 包比較新的原因, 總是出現類似版本過低的提示, 便直接升級到了最新的jdk11版本.
      2. 下載Solr包及配置運行環境
        1. 去Solr官網下載程序包 ,樓主下載了最新的7.5版本 http://www.apache.org/dyn/closer.lua/lucene/solr/7.5.0
        2. Solr 本身內置了Severlet, 故可直接運行, 當然如果不習慣,也可以將其掛在類似 tomcat 等其他Serverlet 容器下運行.
        3. 將下載的Solr 包解壓到合適位置后, 在其bin路徑下, 執行 solr start后, 如出現下面的提示則表示環境正常了.
          image
          此時便可通過瀏覽器訪問 http://localhost:8983, 一切正常的話便可預見類似下面的管理中心界面
          image
          若出現錯誤, 通常可能為jdk環境沒有配置正常,可通過提示對應處理.
        4. 創建索引庫 Core
          1. 在 server\solr 目錄下,新建文件夾,本文以創建一個用於搜索物料產品的索引庫為例. 姑且取名為 icvip 為例, 並默認配置[ server\solr\configsets\_default\conf ] 復制到此路徑下.
          2.   在管理中心界面中,選擇左側的 Core Admin 菜單,創建一個新的 Core. 本處將name設置為icvip,instanceDir 設置為icvip, 注意下面的提示:instanceDir 和 DataDir 一定要在此步驟之前存在,這也是我們為何要在界面創建之前先做第一步的原因.參考截圖如下
            image
        5. 正常添加后, 我們便可以對這個索引庫做操作了,如導入數據,分詞器,上傳文檔,查詢測試....參見如下截圖中的左邊菜單
          image
    3. 中文分詞器ik-analyzer
      為了更好的支持中文分詞,我們此處引入ik分詞器.
      1. 可通過maven倉庫下載最新的ik分詞器的jar包. https://search.maven.org/search?q=com.github.magese, 並將其放在server\solr-webapp\webapp\WEB-INF\lib 目錄下.
      2. 修改server\solr\icvip\conf\managed-schema配置,添加一個fieldType啟用ik分詞器.
<fieldType name="text_ik" class="solr.TextField">
           <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
    1. 重啟Solr服務,並嘗試在 Analysis 中選擇 text_ik 測試是否生效,如下所示
      image
  1. 從數據庫導入數據源
    1. 有了以上的配置后, 我們的搜索庫已經准備好了,接下來就該往其添加索引數據了.當然你可以添加其支持的各種數據格式, 如documents菜單下的Document Type所列.本處介紹另外一種形式的數據源,即直接從數據庫導入數據.在正式導入之前,我們先簡單介紹一下導入數據的內容,本文以一個物料及其規格參數列表為例, 其關系為 1物料:n規格參數 , 數據量大概為 物料表 638 萬條, 參數規格表 9255萬條, 數據庫文件約為15G左右.

       

    2. 前文已說, Solr 是基於java平台下的產物, 需要下載對應的驅動來支持數據庫連接,其中 sqlserver 可通過 https://docs.microsoft.com/zh-cn/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-2017 下載對應的jar包,mysql 對應下載地址為 https://www.mysql.com/products/connector/ .
    3. 在Core目錄下,新建 lib 文件夾,將solr-dataimporthandler 和 數據庫連接驅動 jar包拷貝到此目錄.
       image
    4. 添加Dataimport 支持, server\solr\icvip\conf\solrconfig.xml 添加 requestHandler , 注意如果有其他的 name=”/dataimport” 節點,請將其移除.,其中的 <str name=”config”>節點即為導入數據源的配置文件

      <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
          <lst name="defaults">
            <str name="config">data-config.xml</str>
           </lst>
        </requestHandler>
    5. 在當前目錄下新建 data-config.xml文件, 如下所示

      <?xml version="1.0" encoding="UTF-8"?> 
      <dataConfig>  
          <!--mysql數據源-->
          <!--<dataSource type="JdbcDataSource"   
                    driver="com.mysql.jdbc.Driver"   
                    url="jdbc:mysql://localhost:3306/icvip_material?characterEncoding=utf8&amp;useSSL=false"   
                    user="root"   
                    password="123456"/>  -->
          <!--sqlserver 數據源-->              
          <dataSource type="JdbcDataSource"   
                    driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" 
                    url="jdbc:sqlserver://localhost:1433;DatabaseName=icvip_material"   
                    user="sa"   
                    password="123456"/> 
                    
          <document name="Products">
              
              <!--產品實體-->
              <entity name="Product" dataSource="dataSource" pk="ProductId"
                  query="SELECT * FROM Product"> 
                  <field column="ProductId" name="ProductId" />
                  <field column="CategoryId" name="CategoryId" />
                  <field column="PN" name="PN" />
                  <field column="Brand" name="Brand" />
                  <field column="Describe" name="Describe" />
                  <field column="ImageBigUrl" name="ImageBigUrl" />
                  <field column="ImageSmallUrl" name="ImageSmallUrl" />
                  <field column="DataSheetURL" name="DataSheetURL" />
                  <field column="Series" name="Series" />
                  <field column="ProductFamily" name="ProductFamily" />
                  <field column="CategoryName" name="CategoryName" />
                  <field column="PageUrl" name="PageUrl" />    
                  
                  <!--產品規格實體,關系為1產品:n產品規格-->
                  <entity name="Product_Spec"  pk="SpecificationsId"
                      query="SELECT [Key],[Value] FROM specifications WHERE ProductId='${Product.ProductId}'"> 
                      <field column="Key" name="ProSpecKey" /> 
                      <field column="Value" name="ProSpecValue" /> 
                  </entity>
              </entity>
          </document>
      </dataConfig>
    6. 配置server\solr\icvip\conf\managed-schema,以確認使用的分詞規則
      image
      至於配置的含義,可參考https://wiki.apache.org/solr/DataImportHandler
    7. 導入數據,切換到Dataimport 菜單, 選中實體導入. 接下來就是漫長的等待過程....
      image
  2. 常用查詢參數介紹, 重點需要關注 q/ fq/ hl/start/rows 幾個參數. 可使用Query菜單進行測試.
    image

后記: 經過以上步驟后,我們的Solr應用就基本結束. 不過因Solr作為一個企業級的搜索產品,功能原不止於此,文中並沒有涵蓋完全Solr的操作, 如關於增量索引設置問題,各位如果有需要可以在此基礎上繼續深入研究,附上Solr官網介紹的詳細地址.https://wiki.apache.org/solr/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM