mysql导入数据到solr的方法
admin
2023-05-17 13:02:37
0

本文主要给大家介绍mysql导入数据到solr的方法,其所涉及的东西,从理论知识来获悉,有很多书籍、文献可供大家参考,从现实意义来讲,累计多年的实践经验可分享给大家。

1      mysql导入数据到solr

方式一:创建项目,查询出数据,一条一条addsolr中;(不推荐)

方式二:通过配置复制数据到solr

以上已完成了在本地window8中对solr的部署,为solr添加了一个自定义的coredemo,并且引入了ik分词器。

那么该如何将本地的mysql的数据导入到solr中呢?

1.1    准备工作

1.1.1     准备数据源

mysql数据源:test库中的user表(7条数据),其中这个update_time字段是用于solr更新数据库数据的依据,表中必须得有这个字段。

 mysql导入数据到solr的方法

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主要是针对多图片上传时使用的,可以携带动态加载的参数。', '2017-05-02 15:40:19', '2017-05-0315:40:22');

INSERT INTO `user`VALUES ('5', '赵六', '1', 'demo里也有,多文件上传+预览功能。也可以自己去调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');

 

1.1.2     准备需要的jar

链接mysql驱动jarmysql-connector-java-5.1.14.jar(这个基本都有)

D:\solr-4.10.2\dist\solr-dataimporthandler-4.10.2.jar

mysql导入数据到solr的方法

1.1.3     准备配置

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\confconf目录下,并更名为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:获取增量数据时使用的SQL增量导入时使用

deltaQuery:获取pkSQL增量导入时使用

注意查询条件的写法:${..},如在本例中:

${dataimporter.last_index_time}索引上次导入时间

${ dataimporter.delta.id}实体user查询结果中的id,也可以用${user.id}表示

关于data-config.xml详解,参考博文:

http://www.jianshu.com/p/91a5a0c35475

http://blog.csdn.net/boolbo/article/details/50352331

1.2    配置实现

注意:如果是solr是使用tomcat进行启动,只是相关的jar和配置文件放的位置不一样。配置是一致的。

1、  拷贝mysql-connector-java-5.1.14.jarsolr-dataimporthandler-4.10.2.jarsolrD:\solr-4.10.2\example\solr-webapp\webapp\WEB-INF\lib目录中;

 

mysql导入数据到solr的方法

2,在D:\solr-4.10.2\example\demo-solr\demo\conf目录下,更改solrconfig.xml配置文件。添加如下内容:

   

         data-config.xml

   

 

3,在D:\solr-4.10.2\example\demo-solr\demo\conf目录下,更改schema.xml配置,配置相关字段:

 

  

  

  

  

  

  

  

  

  

  

 

       id

      

   

   

      

      

         

       

      

 

 

4,重启solr应用,查看原有的数据:

mysql导入数据到solr的方法

还是原来的那些数据。

5,导入mysql数据到solr中:

选择Dataimport进行导入操作。

mysql导入数据到solr的方法

查询:

mysql导入数据到solr的方法

证明数据已经导入,并删除了原来的数据!

 

2      删除所有数据

mysql导入数据到solr的方法

Documents运行/update,指定typexml。先查询后删除:

语句为:

*:*

Submit,执行删除!

mysql导入数据到solr的方法

当然,上面说的是手动删除,如果要删除的数据很多,想在下一次自动同步数据的时候自动删除指定的数据该如何做呢?

2.1    条件删除solr数据(在增量导入数据的过程中删除)

场景:有一批要拍卖的店铺数据存储在solr中,拍卖的店铺数据有一个拍卖结束时间(endTime),当拍卖结束时间一到,这条存储在solr中的拍卖数据就没有意义了,想要删除这条存储在solr中的数据。

按照上面的手动删除也不是不可以,但这人工操作未免太扯了,到时间人工去solr中删除这条数据耗时又耗力,也不太现实。

解决办法就是:

data-config.xmlentity中添加:

deletedPkQuery="select id from shops where endTime < NOW()"

 

这一句,这句和entiyquery同级,目的是查询出所有店铺数据中结束时间小于当前时间的店铺id,

这个店铺id会和deltaQuery中收集到的id一并执行deltaImportQuery操作,只不过一个是添加数据,一个是删除数据。

 

注意:这个配置在导入数据成功后,无效果。只在导入过程中有效果!

 

3      性能优化

1、  将所有只用于搜索的,而不需要作为结果的field(特别是一些比较大的field)的stored设置为false

2、  将不需要被用于搜索的,而只是作为结果返回的fieldindexed设置为false

3、  删除所有不必要的copyField声明为了索引字段的最小化和搜索的效率;

4、  将所有的 text fieldsindex都设置成false,然后使用copyField将他们都复制到一个总的 text field上,然后进行搜索。

看了以上介绍mysql导入数据到solr的方法,希望能给大家在实际运用中带来一定的帮助。本文由于篇幅有限,难免会有不足和需要补充的地方,大家可以继续关注行业资讯板块,会定期给大家更新行业新闻和知识,如有需要更加专业的解答,可在官网联系我们的24小时售前售后,随时帮您解答问题的。

 

相关内容

热门资讯

iOS 26.5更新苹果地图两... 苹果地图是iOS 26.5此次更新中获得新功能的应用之一。以下是地图用户需要了解的最新变化。 推荐...
每经热评 | 黄仁勋喝蜜雪冰城... 每经评论员 朱成祥 黄仁勋近期到访北京,被拍到在胡同喝豆汁、吃炸酱面、举着蜜雪冰城饮料。他表情轻松,...
我省3项目被列入工信部先进计算... 本报太原5月15日讯(记者王蕾)近日,工业和信息化部公布了2025年先进计算赋能新质生产力典型应用案...
薛贵:学习的革命——脑科学与人... 1 学习的本质不是知识的装卸, 而是雕刻大脑的“芯片” 耶鲁大学前校长理查德·查尔斯·莱文曾说过:如...
伊朗:已制定管理霍尔木兹海峡指... 新华社德黑兰5月16日电 伊朗伊斯兰议会国家安全和外交政策委员会主席易卜拉欣·阿齐兹16日在社交媒体...
微纳星空双星成功入轨!迈入批产... 来源:北京日报客户端 5月15日12时33分,由海淀企业北京微纳星空科技股份有限公司研制的泰景三号0...
摆拍盲道被撞,反对“愤怒诱饵”... □李琛5月16日,据北京警方通报:刘某(男,26岁)和江某某(女,24岁)为吸粉引流、博取关注、牟取...
原创 这... 此次美高层行程中,随行团队中两位华裔面孔格外引人注目。一位是AI领域的重量级人物黄仁勋,自带科技光环...
联合国教科文组织总干事阿纳尼一... 5月14日下午,联合国教科文组织总干事阿纳尼一行到访张江人工智能创新小镇AI应用商店。 上海于20...
小米Air手机曾接近量产 上市... 快科技5月16日消息,卢伟冰在今晚直播聊手机产品规划时,透露一个重磅内幕,小米其实早就规划过对标苹果...