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