本文主要給大家介紹MySQL導(dǎo)入數(shù)據(jù)到solr的方法,其所涉及的東西,從理論知識來獲悉,有很多書籍、文獻可供大家參考,從現(xiàn)實意義來講,創(chuàng)新互聯(lián)累計多年的實踐經(jīng)驗可分享給大家。
創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)公司一直秉承“誠信做人,踏實做事”的原則,不欺瞞客戶,是我們最起碼的底線! 以服務(wù)為基礎(chǔ),以質(zhì)量求生存,以技術(shù)求發(fā)展,成交一個客戶多一個朋友!專注中小微企業(yè)官網(wǎng)定制,成都網(wǎng)站設(shè)計、網(wǎng)站制作,塑造企業(yè)網(wǎng)絡(luò)形象打造互聯(lián)網(wǎng)企業(yè)效應(yīng)。
方式一:創(chuàng)建項目,查詢出數(shù)據(jù),一條一條add到solr中;(不推薦)
方式二:通過配置復(fù)制數(shù)據(jù)到solr中
以上已完成了在本地window8中對solr的部署,為solr添加了一個自定義的coredemo,并且引入了ik分詞器。
那么該如何將本地的mysql的數(shù)據(jù)導(dǎo)入到solr中呢?
mysql數(shù)據(jù)源:test庫中的user表(7條數(shù)據(jù)),其中這個update_time字段是用于solr更新數(shù)據(jù)庫數(shù)據(jù)的依據(jù),表中必須得有這個字段。
SETFOREIGN_KEY_CHECKS=0;
------------------------------
-- Table structurefor user
------------------------------
DROP TABLE IFEXISTS `user`;
CREATE TABLE`user` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(30) DEFAULT NULL,
`sex` int(1) DEFAULT NULL,
`title` varchar(200) DEFAULT NULL,
`insert_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDBAUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
------------------------------
-- Records of user
------------------------------
INSERT INTO `user`VALUES ('1', '航三', '1', '有電腦','2017-05-02 15:40:19', '2017-05-03 15:40:22');
INSERT INTO `user`VALUES ('2', '理三', '1', '有電腦,生活就是游戲么。要努力啊', '2017-05-02 15:40:19', '2017-05-03 15:40:22');
INSERT INTO `user`VALUES ('3', '李四', '0', '準備工作完成之后就可以進行配置和操作了。', '2017-05-02 15:40:19', '2017-05-03 15:40:22');
INSERT INTO `user`VALUES ('4', '王五', '0', '這個demo主要是針對多圖片上傳時使用的,可以攜帶動態(tài)加載的參數(shù)。', '2017-05-02 15:40:19', '2017-05-0315:40:22');
INSERT INTO `user`VALUES ('5', '趙六', '1', 'demo里也有,多文件上傳+預(yù)覽功能。也可以自己去調(diào)U', '2017-05-25 15:43:03', '2017-05-25 15:43:07');
INSERT INTO `user`VALUES ('6', '周七', '0', '這個demo主要是針對多圖片上傳時使用的', '2017-05-02 15:43:23', '2017-05-11 15:43:26');
INSERT INTO `user`VALUES ('7', '李白', '1', '詩人','2017-05-02 15:43:23', '2017-05-02 15:43:25');
鏈接mysql驅(qū)動jar:mysql-connector-java-5.1.14.jar(這個基本都有)
和D:\solr-4.10.2\dist\solr-dataimporthandler-4.10.2.jar
從solr的解壓文件目錄中找到“D:\solr-4.10.2\example\example-DIH\solr\db\conf”下的db-data-config.xml文件到你的core(比如:
D:\solr-4.10.2\example\demo-solr\demo\conf)conf目錄下,并更名為data-config.xml。
詳細配置如下:
url="jdbc:mysql://localhost:3306/test" user="root"password="123456" batchSize="100" /> query="SELECTid,name,sex,title,insert_time,update_time FROM user" deltaImportQuery="SELECTid,name,sex,title,insert_time,update_time FROM user whereid='${dataimporter.delta.id}'" deltaQuery="SELECT id FROMuser where update_time > '${dataimporter.last_index_time}'"> deltaImportQuery:獲取增量數(shù)據(jù)時使用的SQL(增量導(dǎo)入時使用) deltaQuery:獲取pk的SQL(增量導(dǎo)入時使用) 注意查詢條件的寫法:${..},如在本例中: ${dataimporter.last_index_time}索引上次導(dǎo)入時間 ${ dataimporter.delta.id}實體user查詢結(jié)果中的id,也可以用${user.id}表示 關(guān)于data-config.xml詳解,參考博文: http://www.jianshu.com/p/91a5a0c35475 http://blog.csdn.net/boolbo/article/details/50352331 注意:如果是solr是使用tomcat進行啟動,只是相關(guān)的jar和配置文件放的位置不一樣。配置是一致的。 1、 拷貝mysql-connector-java-5.1.14.jar和solr-dataimporthandler-4.10.2.jar到solr的D:\solr-4.10.2\example\solr-webapp\webapp\WEB-INF\lib目錄中; 2,在D:\solr-4.10.2\example\demo-solr\demo\conf目錄下,更改solrconfig.xml配置文件。添加如下內(nèi)容: 3,在D:\solr-4.10.2\example\demo-solr\demo\conf目錄下,更改schema.xml配置,配置相關(guān)字段: 4,重啟solr應(yīng)用,查看原有的數(shù)據(jù): 還是原來的那些數(shù)據(jù)。 5,導(dǎo)入mysql數(shù)據(jù)到solr中: 選擇Dataimport進行導(dǎo)入操作。 查詢: 證明數(shù)據(jù)已經(jīng)導(dǎo)入,并刪除了原來的數(shù)據(jù)! Documents運行/update,指定type為xml。先查詢后刪除: 語句為: Submit,執(zhí)行刪除! 當然,上面說的是手動刪除,如果要刪除的數(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ù)。 注意:這個配置在導(dǎo)入數(shù)據(jù)成功后,無效果。只在導(dǎo)入過程中有效果! 1、 將所有只用于搜索的,而不需要作為結(jié)果的field(特別是一些比較大的field)的stored設(shè)置為false; 2、 將不需要被用于搜索的,而只是作為結(jié)果返回的field的indexed設(shè)置為false; 3、 刪除所有不必要的copyField聲明為了索引字段的最小化和搜索的效率; 4、 將所有的 text fields的index都設(shè)置成false,然后使用copyField將他們都復(fù)制到一個總的 text field上,然后進行搜索。 看了以上介紹mysql導(dǎo)入數(shù)據(jù)到solr的方法,希望能給大家在實際運用中帶來一定的幫助。本文由于篇幅有限,難免會有不足和需要補充的地方,大家可以繼續(xù)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊板塊,會定期給大家更新行業(yè)新聞和知識,如有需要更加專業(yè)的解答,可在官網(wǎng)聯(lián)系我們的24小時售前售后,隨時幫您解答問題的。 1.2 配置實現(xiàn)
2 刪除所有數(shù)據(jù)
2.1 條件刪除solr數(shù)據(jù)(在增量導(dǎo)入數(shù)據(jù)的過程中刪除)
3 性能優(yōu)化
文章題目:mysql導(dǎo)入數(shù)據(jù)到solr的方法
瀏覽地址:http://weahome.cn/article/ihohcd.html