我的编程空间,编程开发者的网络收藏夹
学习永远不晚

(solr系列:四)将mysql数据库中的数据导入到solr中及删除solr中导入的数据

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

(solr系列:四)将mysql数据库中的数据导入到solr中及删除solr中导入的数据

在前面的博文中,已完成了在tomcat中对solr的部署,为solr添加了一个自定义的core,并且引入了ik分词器。

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

准备工作:

1、mysql数据源:myuser库中的user表(8条数据),其中这个updateTime字段是用于solr更新数据库数据的依据,表中必须得有这个字段。



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、数据源配置文件:新建文件:data-config.xml,文件内容如下

<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驱动jar包和solr导入数据所需的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文件,为该文件添加如下内容:

 <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对应-->
		<!--字段为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中数没有任何数据的。

(solr系列:四)将mysql数据库中的数据导入到solr中及删除solr中导入的数据


步骤五:导入mysql数据到solr中


(solr系列:四)将mysql数据库中的数据导入到solr中及删除solr中导入的数据

再次查看数据,如果显示如下,那么恭喜你,数据导入成功!

(solr系列:四)将mysql数据库中的数据导入到solr中及删除solr中导入的数据



=====================================================================================

如果想删除solr中导入的数据该如何操作,一上图就……了然(solr系列:四)将mysql数据库中的数据导入到solr中及删除solr中导入的数据

(solr系列:四)将mysql数据库中的数据导入到solr中及删除solr中导入的数据xml命令:

1、根据查询删除:删除所有数据

<delete><query>*:*</query></delete>
<commit/>

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

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

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

解决办法就是:

    在data-config.xmlentity中添加:

deletedPkQuery="select id from shops  where endTime &lt; NOW()"

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

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


如果是其他业务场景也可以借鉴下这篇博客中在表中添加isdelete字段的方式完成删除,其实只要有一个字段能够标识就行:

参考地址:http://simplelife.blog.51cto.com/9954761/1883024 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

(solr系列:四)将mysql数据库中的数据导入到solr中及删除solr中导入的数据

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python实现将MongoDB中的数据导入到MySQL

本文主要介绍了一个将 MongoDB 中的数据导入到 mysql 中的 python 工具类 MongoToMysql。该工具类实现了获取 MongoDB 数据类型、创建 MySQL 表结构以及将数据从 MongoDB 推送到 MySQL
2023-05-05

Sqoop怎么将MySQL数据导入到hive中

这篇文章主要讲解了“Sqoop怎么将MySQL数据导入到hive中”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Sqoop怎么将MySQL数据导入到hive中”吧!MySQL表:mysql>
2023-06-02

Oracle怎么将文件数据导入到VARCHAR列中

要将文件数据导入到VARCHAR列中,可以使用Oracle的SQLLoader工具或者外部表来实现。以下是使用SQLLoader工具的步骤:创建一个控制文件,指定要加载的数据文件和目标表的字段映射关系。例如:LOAD DATAINFILE
Oracle怎么将文件数据导入到VARCHAR列中
2024-04-09

将数据库导入到阿里云盘中的文件

#随着互联网的发展,数据的重要性越来越突出,而数据库则是数据存储和管理的重要工具。本文将介绍如何将数据库中的数据导入到阿里云盘中的文件中,以方便数据的备份和共享。详细说明:在数据库中,我们可以使用各种编程语言(如Python、Java等)来查询、插入、更新和删除数据。然而,如果我们需要将这些数据导出并保存为文件,
将数据库导入到阿里云盘中的文件
2023-12-26

sqlite里的数据如何导入到mysql中

将SQLite数据库中的数据导入到MySQL数据库中,可以按照以下步骤操作:使用SQLite数据库工具导出数据:可以使用SQLite数据库工具(如SQLiteStudio、DB Browser for SQLite等)导出SQLite数据库
sqlite里的数据如何导入到mysql中
2024-04-10

如何将MySQL的表数据全量导入clichhouse库中

这篇文章主要介绍了如何将MySQL的表数据全量导入clichhouse库中的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何将MySQL的表数据全量导入clichhouse库中文章都会有所收获,下面我们一起来看
2023-06-29

mysql如何将数据库中的所有表结构和数据导入到另一个库

目编程录一、问题描述二http://www.lsjlt.com、解决方案1.使用mysqldump命令备份数据库2.创建目标数据库3.导入数据 到目标数据库三、补充知识3.1 mysqldump命令介绍3.2 常用备份命令总结一、问题描述
mysql如何将数据库中的所有表结构和数据导入到另一个库
2024-10-11

在sqlserver数据库中导入Excel数据的全过程

1、选择要导入的数据库右击—&mdjsash;任务——导入数据2、数据源选择“Microsoft Excel”3、Excel文件路径选择你要导入的excel文件,Excel版本选
在sqlserver数据库中导入Excel数据的全过程
2024-01-29

编程热搜

目录