solr 同步 mysql

1、首先建立一個數據庫和表

這裏建立了一個表,加上了測試數據,注意這裏有一個字段來記錄更新時間  update_datemysql

 

2、修改配置文件

咱們首先介紹全量同步,再介紹增量同步sql

 

個人 solr 版本是 7.5 的,new_core是我建立的 core,打開 solrconfig.xml,增長以下配置數據庫

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

而後在當前 conf 目錄下建立 data-config.xmlapache

<dataConfig>
		<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.0.131:3306/hongone"  user="root"  password="***"/>
           <document>
                <entity name="ho_front_message" pk="id" transformer="DateFormatTransformer" 
				query="SELECT id, content,object_id,type,update_date,create_date FROM ho_front_message"
				>
					<field column="id" name="id"/>
					<field column="object_id" name="objectId"/>
					<field column="content" name="content"/>
					<field column="type" name="type"/>
					<field column="enable_flag" name="enableFlag"/>
                    <field column="update_date" name="updateDate" dateTimeFormat="yyyy-MM-dd HH:mm:ss" />
					<field column="create_date" name="createDate" dateTimeFormat="yyyy-MM-dd HH:mm:ss" />
                </entity>
          </document>
</dataConfig

注意:修改 mysql 鏈接地址和數據庫名和用戶名和密碼測試

entity 標籤下 url

-name:表名spa

-pk:主鍵名code

-query:查詢語句,全量同步下會同步當前表中哪些數據orm

-field:表子段映射,注意時間格式xml

以上須要同步的表子段,須要配置到 managed-schema.xml ,對於已有的字段,不須要添加,例如 id 字段

<!--ho_front_message-->
  <field name="type" type="string" indexed="true" stored="true"/>
  <field name="objectId" type="string" indexed="true" stored="true"/>
  <field name="enableFlag" type="string" indexed="true" stored="true"/>
  <field name="createDate" type="pdate" indexed="true" stored="true"/>
  <field name="updateDate" type="pdate" indexed="true" stored="true"/>
   <!--ho_front_message-->

注意 type="pdate" 由於個人 solr 是7.5 版本的

 

3、測試數據

選擇 full-import  全量導入

勾選 clean 表示導入以前會清空數據

entity 選擇咱們在data-config.xml建立的

能夠看到數據已經查詢出來了

 

4、增量同步

修改 data-config.xml

<dataConfig>
		<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.0.131:3306/hongone"  user="root"  password="***"/>
           <document>
                <entity name="ho_front_message" pk="id" transformer="DateFormatTransformer" 
				query="SELECT id, content,object_id,type,update_date,create_date FROM ho_front_message"
				deltaQuery="select id from ho_front_message where update_date > '${dih.last_index_time}'"
				deltaImportQuery="select * from ho_front_message where id='${dih.delta.id}'"
                deletedPkQuery="select id from ho_front_message where enable_flag='0'"
				>
					<field column="id" name="id"/>
					<field column="object_id" name="objectId"/>
					<field column="content" name="content"/>
					<field column="type" name="type"/>
					<field column="enable_flag" name="enableFlag"/>
                    <field column="update_date" name="updateDate" dateTimeFormat="yyyy-MM-dd HH:mm:ss" />
					<field column="create_date" name="createDate" dateTimeFormat="yyyy-MM-dd HH:mm:ss" />
                </entity>
          </document>
</dataConfig>

deltaQuery:增量索引查詢主鍵ID
deltaImportQuery:增量索引查詢導入的數據
deletedPkQuery:此操做值查詢那些數據庫裏僞刪除的數據的ID(enable_flag=0的數據)

配置完後後,打開數據庫修改其中一條記錄的值和update_date

update ho_front_message set content='xxxx' ,update_date=now() where id='xxx'

導入增量數據,勾選 delta-import

再次查詢看看增量數據是否正確

 

 

刪除數據就是把某條數據的 enable_flag=0 ,再操做一下增量導入

相關文章
相關標籤/搜索