在 这篇 和 这篇 文章中我分别介绍了如何将 MySQL 的全量数据导入到 Apache Solr 中以及如何分页导入等,本篇文章将继续介绍如何将 MySQL 的增量数据导入到 Solr 中。
增量导数接口为 deltaimport,对应的页面如下:
如果我们使用 《将 MySQL 的全量数据以分页的形式导入到 Apache Solr 中》的配置,然后在 Command
下拉框里面我们选择 delta-import
选项,最后点击页面上的 Execute
按钮,执行将不会报任何的错误,但是执行的结果是 Requests: 0 , Fetched: 0 , Skipped: 0 , Processed: 0
。这个结果的原因是我们并没有定义 delta-import 的处理逻辑,所以无法处理增量数据。
增量导数需要在之前的设置上进行如下设置:
<dataConfig> <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/iteblog" user="root" password="xxxxx" /> <document> <entity name="iteblog" query="select id,post_title,post_author from wp_posts order by id limit ${dataimporter.request.length} offset ${dataimporter.request.offset}" deltaQuery="select id from wp_posts where post_date > '${dataimporter.last_index_time}'" deltaImportQuery="SELECT id,post_title,post_author from wp_posts where id='${dataimporter.delta.id}'"> <field column="id" name="id" /> <field column="post_title" name="post_title" /> <field column="post_author" name="post_author" /> </entity> </document> </dataConfig>
增加内容见上面高亮的6和7行配置。这里对新增的配置进行一些说明:
- 在执行
full-import
的时候,Solr 会在 Core/Collection 的配置目录下生成一个名为dataimport.properties
的文件,其内容如下:#Sat Aug 18 22:34:28 GMT+08:00 2018 last_index_time=2018-08-18 22\:34\:27 iteblog.last_index_time=2018-08-18 22\:34\:27
主要用于存储本 Core/Collection 上一次更新的时间
- 上面配置中的
deltaQuery
主要用于查询出 wp_posts 表距离上次更新之后新增文章的 id,在本文的示例中就是找到 wp_posts 表在2018-08-18 22:34:27
时间之后新增的文章 id。 deltaImportQuery
属性用于查询更新文章的相关信息。dataimporter.delta.id
可以拿到deltaQuery
配置获取的文章 id。- 如果你 Solr 的
solr.in.sh
文件里面没有配置SOLR_TIMEZONE="UTC+8"
,那dataimport.properties
文件里面记录的时间比实际时间少八小时。也就是说,我们现在时间为22:48,如果你这时候更新了索引信息,那么dataimport.properties
里面记录的时间为 14:48,整整少了八小时,那这时候你根据这个时间去查增量的文章可能会有问题。
设置完上面的配置之后,我们再一次点击 Execute
按钮,这时候 Solr 就能够从 MySQL 里面的 wp_posts 表找到文章 post_date 大于 2018-08-18 22:34:27
的所有文章,然后进行索引。
事实上,点击 Execute
按钮相当于执行下面 URL 请求:
http://iteblog.com:8983/solr/mysql2solr/dataimport?core=mysql2solr&indent=on&commit=true&name=dataimport&clean=false&wt=json&command=delta-import
我们可以通过编写一个定时任务,每天执行上面 URL 请求,获取每天的增量数据,然后进行索引,具体实现比较简单,我就不再赘述。
另外,关于 DataImportHandler 的更多详细使用可以参见 这里。delta 高级使用可以参见这里。
本博客文章除特别声明,全部都是原创!原创文章版权归过往记忆大数据(过往记忆)所有,未经许可不得转载。
本文链接: 【将 MySQL 的增量数据导入到 Apache Solr 中】(https://www.iteblog.com/archives/2407.html)