1. 程式人生 > >Solr全量索引、增量索引

Solr全量索引、增量索引

引言:
① 實現MySQL(Oracle)表資料全量索引和增量索引,基於Solr DIH元件實現起來比較簡單,只需要重複使用Solr的DIH(Data Import Handler)元件,對data-config.xml進行簡單的修改即可。Solr DIH元件的實現類為org.apache.solr.handler.dataimport.DataImportHandler,在Solr的solrconfig.xml中配置兩個handler。
② 實現定時增量索引,使用solr-dataimporthandler-scheduler配置。
詳細配置可以參考官方文件

一、在managed-schema檔案中配置用到的欄位名稱

例如:
 <field name="nickName" type="text_ik" indexed="true" stored="true"/>

二、全量索引和增量索引

  1. 全量索引
    在solr_home\solr\new_core\conf\solrconfig.xml檔案中增加

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler>
在solr_home\solr\new_core\conf目錄下新建data-config.xml,新增:

<dataConfig> <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/dbName" user="root" password="123456"/> <document name="user"> <entity name="user" pk="id" query="select user_id as id,nick_name from user"> <field column="user_id" name="id" /> <field column="nick_name" name="nickName" /> </entity> </document> </dataConfig>
使用時傳送url:

http://localhost:8080/solr/new_core/dataimport?command=full-import&commit=true&clean=true

2.增量索引
在solr_home\solr\new_core\conf\solrconfig.xml檔案中增加

<requestHandler name="/deltaimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">delta-data-config.xml</str> </lst> </requestHandler>

在solr_home\solr\new_core\conf目錄下新建delta-data-config.xml,新增:

<dataConfig> <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/dbName" user="root" password="123456"/> <document name="user"> <entity name="user" pk="id" query="select user_id as id,nick_name from user"
            deltaImportQuery="select user_id as id,nick_name from user where user_id='${dih.delta.id}'"
            deltaQuery="select user_id as id from user where create_time > '${dih.last_index_time}'"
            transformer="RegexTransformer"> <field column="user_id" name="id" /> <field column="nick_name" name="nickName" /> </entity> </document> </dataConfig>

${dih.delta.id}${dih.last_index_time}是內建函式。在
dataimport.properties中會記錄id和最後新增索引的時間


#Mon Dec 12 17:16:29 CST 2016

last_index_time=2016-12-12 17:16:29
user.last_index_time=2016-12-12 17:16:29

    deltaQuery查詢出有更改過的id
    deltaImportQuery根據id查詢 【在此方法中,使用了資料庫中的一個欄位createTime來確定新建立的資料在建立索引之後新增的。真正的使用法歡迎知道的朋友評論說明,謝謝】

使用時傳送url:http://localhost:8080/solr/new_core/deltaimport?command=delta-import

注意:以上的引數說明

    pk為主鍵和managed-schema中配置的<uniqueKey>id</uniqueKey>對應。
    column對應資料庫中的欄位

    name對應managed-schema中的name

    url中的引數:
    command:full-import/deltaimport 全量索引/增量索引
    commit:選擇是否在索引完成之後提交。預設為true
    clean:選擇是否要在索引開始構建之前刪除之前的索引,預設為true
    optimize:是否在索引完成之後對索引進行優化。預設為true
    debug:是否以除錯模式執行,適用於互動式開發(interactive development mode)之中。