1. 程式人生 > >Solr7.4 Linux 安裝及資料匯入

Solr7.4 Linux 安裝及資料匯入

solr 讀音應該是叫 “so lar”

之前寫過一篇介紹solr的文章https://zhangdianlei.github.io/2018/09/11/Apache-Solr/ ,這裡就不再囉嗦solr的事情了。今天搞了一天的solr,現在記錄一下

solr安裝及使用:

  1. Linux環境下安裝
  2. 新增環境變數
  3. 啟動solr,簡單瞭解solr
  4. 新建Core
  5. 從資料庫匯入資料
  6. 資料查詢

下面詳解介紹每一部分。

Linux環境下安裝solr

要求: 電腦上已經裝了jdk8+

下載:建一個工作資料夾,執行下載命令:

wget http://mirrors.shuosc.org/apache/lucene/solr/7.4.0/solr-7.4.0.tgz

解壓安裝:

tar -zxvf solr-7.4.0.tgz

新增環境變數

將solr新增到環境變數,可以快速的啟動、重啟、關閉等,非常有必要。

編輯檔案:

vim /etc/profile

下面是我的配置:

export JAVA_HOME=/root/software/jdk1.8.0_181
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

# solr environment
export SOLR_INSTALL_HOME=/root/solr-7.4.0
export
PATH=$SOLR_INSTALL_HOME/bin:$PATH

然後執行:

source /etc/profile

使得配置檔案生效

然後可以執行以下命令驗證配置成功:

solr start

啟動solr,簡單瞭解solr

啟動、重啟、關閉命令:

solr start
solr restart
solr stop

有時系統因安全問題考慮,可能需要在命令後加上-force引數

solr啟動後,訪問 http://ip:8983/solr之後,將訪問web管理介面:

新建Core

每個人新建Core的方法,和配置方法都不一樣,在此,僅記錄我的建立和配置方法。

先在 Core Admin --> Add Core

確認新增,會報一個找不到檔案的錯誤,然後這時候,需要將標準配置檔案,新增到剛才新增的Core下面,標準配置檔案在 ~SolrDir/server/solr/configsets/_default/conf下面,假設當前目錄為solr根資料夾下,新的Core名字為new_core,執行:

cp -r server/solr/configsets/_default/conf server/solr/new_core

新建Core完成!

匯入資料庫資料

在上一步匯入的Conf目錄下,修改以下配置:

solrconfig.xml下新增以下配置,新增位置大約在 680行,SearchHandler配置上面:

 <!-- Request Handlers
       http://wiki.apache.org/solr/SolrRequestHandler
       Incoming queries will be dispatched to a specific handler by name
       based on the path specified in the request.

       If a Request Handler is declared with startup="lazy", then it will
       not be initialized until the first request that uses it.
    -->

  <!-- add property -->
  <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">  
    <lst name="defaults">  
        <str name="config">data-config.xml</str>  
    </lst>
  </requestHandler>
  
  <!-- SearchHandler
       http://wiki.apache.org/solr/SearchHandler
       For processing Search Queries, the primary Request Handler
       provided with Solr is "SearchHandler" It delegates to a sequent
       of SearchComponents (see below) and supports distributed
       queries across multiple shards
    -->

data-config.xml是引用的配置檔案,需要新建這個配置檔案。在linux下,直接用vim新建即可,vim data-config.xml,然後 wq儲存退出即可。

該檔案的配置如下,連線的是postgresql,如果是連mysql的話,需要改一下driver即可(com.mysql.jdbc.Driver):

<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
    <dataSource name="source"
    type="JdbcDataSource"
    driver="org.postgresql.Driver"
    url="jdbc:postgresql://localhost:3306/test_db"
    user="root"
    password="abc123"
    />
    <document>
        <entity name="person"
            pk="id"
            dataSource="source"
            query="select * from person"
            deltaImportQuery="select * from person where id = '${dih.delta.id}'"
            deltaQuery="select id from person where update_date > '${dataimporter.last_index_time}' and status_flag = 'success'">
            <field column="id" name="id"/>
            <field column="update_date" name="update_date"/>
        </entity>
    </document>
</dataConfig>

這裡,需要新增用到的驅動包,用到什麼驅動下載什麼,可以從mvn庫下載(https://mvnrepository.com/),將資料連線驅動包下載之後,放到solr\server\solr-webapp\webapp\WEB-INF\lib下,然後將solr{home}\dist目錄下的:solr-dataimporthandler-7.4.0.jar和solr-dataimporthandler-extras-7.4.0.jar這兩個jar包拷貝到 solr\server\solr-webapp\webapp\WEB-INF\lib下。

簡單說一下這三個query的作用:

query: 在全量匯入時使用

**deltaImportQuery:**在增量匯入時執行,其中的id來自於 deltaQuery 的查詢結果。

在這之後,需要配置managed-schema檔案,與資料庫進行對映,在117行附近,新增與資料庫的對映,具體新增規則,不詳細寫了。

<field name="_root_" type="string" indexed="true" stored="false" docValues="false" />
<field name="_text_" type="text_general" indexed="true" stored="false" multiValued="true"/>

<!-- add propertity -->
<field name="invoice_type" type="text_ik" indexed="true" stored="true" />
<field name="invoice_code" type="string" indexed="true" stored="true" />
<field name="invoice_num" type="string" indexed="true" stored="true" />

為了查詢的效果,需要再配一下中文分詞器,將下面配置放到其中,位置大約在358行:

 <fieldType name="text_gen_sort" class="solr.SortableTextField" positionIncrementGap="100" multiValued="true">
      <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>

    <!-- add propertity -->
    <fieldType name="text_ik" class="solr.TextField">  
        <analyzer type="index" useSmart="false"
            class="org.wltea.analyzer.lucene.IKAnalyzer" />
        <analyzer type="query" useSmart="true"
            class="org.wltea.analyzer.lucene.IKAnalyzer" />
    </fieldType> 

資料查詢