1. 程式人生 > >Solr之Mysql資料庫全量、增量同步-yellowcong

Solr之Mysql資料庫全量、增量同步-yellowcong

Solr和資料庫進行資料的同步,1、配置solrconfig.xml,2、配置data-config.xml,3.配置資料庫(建立表和新增遠端訪問許可權),4.配置schema.xml,5、新增jar包,6.系統時間和mysql時間同步,這樣dataimport.properties 記錄的更新索引時間和資料庫時間一致,才能實現增量更新, date -s “2017-04-14 12:12:00”

1 修改solrconfig.xml


#修改solrconfig.xml 配置檔案
/usr/local/solr/solr-4.10.3/example/solr/collection1/conf/solrconfig.xml

#新增如下配置 增加resultHandler配置 
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler>

修改solrconfig.xml 檔案
這裡寫圖片描述


新增如下配置
這裡寫圖片描述

2 建立data-config.xml

在solrconfig.xml的同級目錄下建立data-config.xml檔案,配置資料庫連線和Solr與mysql資料的對應關係和查詢語句。

a 建立測試資料

使用的是Mysql測試的,我的oracle完犢子了

-- 開啟遠端訪問
GRANT ALL PRIVILEGES ON *.*TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

-- 開啟遠端訪問
GRANT ALL PRIVILEGES ON *.*TO 'root'@'%' IDENTIFIED BY
'root' WITH GRANT OPTION;
-- 建立資料庫 DROP DATABASE IF EXISTS solr; CREATE DATABASE solr; USE solr; -- 如果存在就刪除表 DROP TABLE IF EXISTS common_passage; -- 建立表 CREATE TABLE common_passage( id INT PRIMARY KEY AUTO_INCREMENT COMMENT '主鍵', author VARCHAR(32) COMMENT '作者', title VARCHAR(64) COMMENT '標題', content TEXT NOT NULL COMMENT '文章內容', add_date TIMESTAMP COMMENT '新增日期' ); -- mysql 的日期是一個函式-- 尷尬了 -- select SYSDATE() from DUAL -- 插入資料 INSERT INTO common_passage VALUES(NULL,'張三','Java','Java是xx',SYSDATE()); INSERT INTO common_passage VALUES(NULL,'李四','Oracle','關係型資料庫',SYSDATE()); INSERT INTO common_passage VALUES(NULL,'王五','Mysql','老子也是關係型 資料庫',SYSDATE()); INSERT INTO common_passage VALUES(NULL,'趙六','Solr','基於Lucene的搜尋引擎',SYSDATE());

b 配置data-config.xml

我這個地方是我的資料庫配置,你最好看好自己的資料庫配置地址,以及使用者名稱及密碼等,${dataimporter.request.id} 這個用來獲取傳遞過來的查詢引數,id是變化的,但是dataimporter.request是固定的

deltaImportQuery 是在增量匯入的時候呼叫
deltaQuery 增量匯入的時候,先查詢滿足增量條件的資料,然後,執行deltaImportQuery 的sql,匯入資料

<dataConfig> 
    <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver"     
    url="jdbc:mysql://10.0.7.113/solr" user="root" password="root"/> 
        <document> 
        <!-- ${dataimport.request.id}中dataimport,是solrconfig.xml配置的名稱--> 
        <entity name="common_passage"  transformer="DateFormatTransformer"  
            query="SELECT id,author,title,content,add_date FROM common_passage a WHERE a.id >= ${dataimporter.request.id}"
            deltaImportQuery="SELECT id,author,title,content,add_date FROM common_passage a WHERE a.id = ${dih.delta.id}"  
            deltaQuery="SELECT id FROM common_passage where add_date > '${dataimporter.last_index_time}'">
      <!--查詢的資料和資料庫索引意義對應
                    column 是查詢的欄位
        name 是solr索引對應的欄位
        --> 
        <field column="id" name="id"/> 
        <field column="author" name="author"/> 
        <field column="title" name="title"/> 
        <field column="content" name="content"/> 
        <field column="add_date" name="add_date" dateTimeFormat="yyyy-MM-dd HH:mm:ss"/> 
        </entity> 
    </document> 
</dataConfig>

這裡寫圖片描述

c 配置schema.xml 檔案

我們的entity的索引欄位,需要在schema.xml檔案中配置,有些欄位是存在的,不用配置,有些沒有,就需要自己配置了。

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="title" type="text_general" indexed="true" stored="true" multiValued="true"/>
<field name="author" type="text_general" indexed="true" stored="true"/>
<field name="content" type="text_general" indexed="false" stored="true" multiValued="true"/>
<field name="add_date" type="date" indexed="true" stored="true"/>

這裡寫圖片描述

3 jar包的匯入

拷貝solr-dataimporthandler-4.10.3.jar,solr-dataimporthandler-extras-4.10.3.jar,兩個jar包到tomcat的solr的lib目錄下

拷貝Mysql驅動,看你的資料庫的驅動,根據你自己的驅動來弄

#拷貝solr驅動
cp solr-dataimporthandler-4.10.3.jar /usr/local/solr/apache-tomcat-7.0.62/webapps/solr/WEB-INF/lib/

cp solr-dataimporthandler-extras-4.10.3.jar /usr/local/solr/apache-tomcat-7.0.62/webapps/solr/WEB-INF/lib/

#拷貝Mysql驅動, 直接下載到lib目錄
wget http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.21/mysql-connector-java-5.1.21.jar

這裡寫圖片描述

拷貝到目標目錄
這裡寫圖片描述

匯入資料

新增成功後,匯入的配置有資料了

這裡寫圖片描述

匯入的方式(Full Import/全部匯入, delta import 增量同步)

這裡寫圖片描述

全量

一次將所有的資料都匯入
這裡寫圖片描述

同步的結果
這裡寫圖片描述

通過url的方式來同步,而非管控臺方式
這裡寫圖片描述

--直接在瀏覽器裡面,傳送get請求
http://192.168.66.100:8080/solr/collection1/dataimport?command=full-import&clean=true&commit=true&wt=json&indent=true&verbose=false&optimize=false&debug=false&id=0
引數 物理意義
command full-import(全量)/delta-import(增量)
clean 是否清空資料
commit 是否提交
wt 返回資料格式
indent 返回的結果是否縮排
verbose 表示你想要得到一些關於中間步驟的資訊
optimize optimize操作可以優化查詢效能,但是消耗資源多
debug debug模式
id 這個地方的資料是自定義的引數



下面是請求返回結果
這裡寫圖片描述

增量同步

逐漸增加索引的量。需要結合deltaImportQuery,和deltaQuery 兩個查詢,(這種增量的方式,需要在設計表的時候,新增一個欄位,來記錄最後更新的時間)
1、deltaQuery 查詢出滿足增量條件的id
2、deltaImportQuery匯入滿足條件id的資料

這裡寫圖片描述

請求結果

http://192.168.66.100:8080/solr/collection1/dataimport?command=delta-import&commit=true&wt=json&indent=true&verbose=false&clean=false&optimize=false&debug=false

請求詳細

這裡寫圖片描述

dataimport.properties

這個檔案記錄最後匯入資料的時間,${dataimporter.last_index_time}呼叫的就是這個配置檔案裡面的時間

這裡寫圖片描述

Tomcat的常用

#關閉tomcat
/usr/local/solr/apache-tomcat-7.0.62/bin/shutdown.sh

#開啟tomcat
/usr/local/solr/apache-tomcat-7.0.62/bin/startup.sh

#檢視啟動情況
tail -f -n 100 /usr/local/solr/apache-tomcat-7.0.62/logs/catalina.2017-12-04.log

#檢視啟動情況
jps

參考文獻