您好,登錄后才能下訂單哦!
在前面的博文中,已完成了在tomcat中對solr的部署,為solr添加了一個自定義的core,并且引入了ik分詞器。
那么該如何將本地的mysql的數(shù)據(jù)導入到solr中呢?
準備工作:
1、mysql數(shù)據(jù)源:myuser庫中的user表(8條數(shù)據(jù)),其中這個updateTime字段是用于solr更新數(shù)據(jù)庫數(shù)據(jù)的依據(jù),表中必須得有這個字段。
/* Navicat MySQL Data Transfer Source Server : localhost Source Server Version : 50521 Source Host : localhost:3306 Source Database : user Target Server Type : MYSQL Target Server Version : 50521 File Encoding : 65001 Date: 2016-10-21 10:14:01 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, `updateTime` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES ('1', '張三', 'abc', '2016-10-21 10:10:58'); INSERT INTO `user` VALUES ('2', '李四', 'def', '2016-10-21 10:10:58'); INSERT INTO `user` VALUES ('3', '王五', 'ghi', '2016-10-21 10:10:58'); INSERT INTO `user` VALUES ('4', '趙六', 'jkl', '2016-10-21 10:10:58'); INSERT INTO `user` VALUES ('5', '田七', 'mno', '2016-10-21 10:10:58'); INSERT INTO `user` VALUES ('6', '老八', 'pqr', '2016-10-21 10:10:58'); INSERT INTO `user` VALUES ('7', '金九', 'stu', '2016-10-21 10:10:58'); INSERT INTO `user` VALUES ('8', '銀十', 'vwx', '2016-10-21 10:10:58');
2、數(shù)據(jù)源配置文件:新建文件:data-config.xml,文件內(nèi)容如下:
<dataConfig> <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/myuser" user="root" password="root" batchSize="100" /> <document> <entity name="user" pk="id" query="SELECT id,name,password,updateTime FROM user" deltaImportQuery="SELECT id,name,password,updateTime FROM user where id='${dataimporter.delta.id}'" deltaQuery="SELECT id FROM user where updateTime > '${dataimporter.last_index_time}'"> <field column="id" name="id" /> <field column="name" name="name" /> <field column="password" name="password" /> <field column="updateTime" name="updateTime" /> </entity> </document> </dataConfig>
3、mysql驅(qū)動jar包和solr導入數(shù)據(jù)所需的jar包:mysql-connector-java-5.1.32.jar(這個大家都有) 和 solr-dataimporthandler-4.10.2.jar(這個在solr-4.10.2\dist目錄下可以找到,復制出來一個即可)
====================================================================================
準備工作完成之后就可以進行配置和操作了。
步驟一:將剛才準備的那兩個jar包復制到apache-tomcat-7.0.72\webapps\solr\WEB-INF\lib目錄下。
步驟二:將準備的data-config.xml文件復制到solrhome\simple\conf目錄下,和schema.xml同一目錄。
步驟三:在solrhome\simple\conf目錄下找到solrconfig.xml文件,為該文件添加如下內(nèi)容:
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler>
步驟四:在solrhome\simple\conf目錄下找到schema.xml文件,打開并修改如下:
<?xml version="1.0" encoding="UTF-8" ?> <schema name="example" version="1.5"> <!--定義type類型--> <types> <fieldType name="string" class="solr.StrField" sortMissingLast="true" /> <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/> <fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0" /> <fieldType name="date" class="solr.TrieDateField" precisionStep="8" positionIncrementGap="0" /> <fieldType name="text_ik" class="solr.TextField"> <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer" /> </fieldType> </types> <!--定義字段--> <fields> <field name="_version_" type="long" indexed="true" stored="true" /> <field name="_root_" type="string" indexed="true" stored="false" /> <field name="id" type="int" indexed="true" stored="true" required="true" multiValued="false" /> <!--注意:這里的field中的name要和data-config.xml中的name對應(yīng)--> <!--字段為name的type類型可以是string--> <field name="name" type="text_ik" indexed="true" stored="true" /> <field name="password" type="string" indexed="true" stored="true" /> <field name="updateTime" type="date" indexed="true" stored="true" /> </fields> <uniqueKey>id</uniqueKey> <solrQueryParser defaultOperator="AND" /> </schema>
步驟四:啟動tomcat,瀏覽器訪問:locahost:8080/solr 原來的simple中數(shù)沒有任何數(shù)據(jù)的。
步驟五:導入mysql數(shù)據(jù)到solr中
再次查看數(shù)據(jù),如果顯示如下,那么恭喜你,數(shù)據(jù)導入成功!
=====================================================================================
如果想刪除solr中導入的數(shù)據(jù)該如何操作,一上圖就……了然
xml命令:
1、根據(jù)查詢刪除:刪除所有數(shù)據(jù)
<delete><query>*:*</query></delete> <commit/>
當然,上面說的是手動刪除,如果要刪除的數(shù)據(jù)很多,想在下一次自動同步數(shù)據(jù)的時候自動刪除指定的數(shù)據(jù)該如何做呢?
場景:有一批要拍賣的店鋪數(shù)據(jù)存儲在solr中,拍賣的店鋪數(shù)據(jù)有一個拍賣結(jié)束時間(endTime),當拍賣結(jié)束時間一到,這條存儲在solr中的拍賣數(shù)據(jù)就沒有意義了,想要刪除這條存儲在solr中的數(shù)據(jù)。
按照上面的手動刪除也不是不可以,但這人工操作未免太扯了,到時間人工去solr中刪除這條數(shù)據(jù)耗時又耗力,也不太現(xiàn)實。
解決辦法就是:
在data-config.xml的entity中添加:
deletedPkQuery="select id from shops where endTime < NOW()"
這一句,這句和entiy的query同級,目的是查詢出所有店鋪數(shù)據(jù)中結(jié)束時間小于當前時間的店鋪id,
這個店鋪id會和deltaQuery中收集到的id一并執(zhí)行deltaImportQuery操作,只不過一個是添加數(shù)據(jù),一個是刪除數(shù)據(jù)。
如果是其他業(yè)務(wù)場景也可以借鑒下這篇博客中在表中添加isdelete字段的方式完成刪除,其實只要有一個字段能夠標識就行:
參考地址:http://simplelife.blog.51cto.com/9954761/1883024
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。