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"/>
二、全量索引和增量索引
-
全量索引
在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:
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)之中。